【问题标题】:Why should Test methods in Junit be defined public?为什么要将 Junit 中的测试方法定义为公开的?
【发布时间】:2013-10-17 15:51:03
【问题描述】:

我正在浏览 junit 测试的文档,但无法理解将测试定义为公共测试的必要性。有人可以分享一些关于此的信息吗?

我在https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Test.java阅读

但我仍然不清楚原因。

我的意思是为什么我不能写一些东西

@Test
private void testAdd(){ }

【问题讨论】:

    标签: junit junit4


    【解决方案1】:

    JUnit 框架从您的测试类外部调用您的测试方法。如果您的测试方法是私有的,它就无法做到这一点。

    【讨论】:

    • 知道了!但出现的另一个问题是:我们如何隐藏我们不希望其他用户从我们的测试类外部访问的任何测试方法?
    • @Jagori 私有测试方法的用例是什么?测试方法的目的是由 JUnit 框架运行,因此拥有私有的没有用。您可以在测试类中编写私有的非测试方法,如果您需要无法从类外部直接访问的代码,然后由测试方法调用这些方法。
    • 通常测试不包含在已发布的工件中,因此无法使用。
    【解决方案2】:

    “测试类、测试方法和生命周期方法不需要是公共的,但它们不能是私有的。”

    参考。文档: https://junit.org/junit5/docs/current/user-guide/#writing-tests-classes-and-methods

    【讨论】:

    • 这适用于 JUnit 5,但不适用于 JUnit 4(问题被标记)。因此,如果您想编写不公开的测试方法,请考虑升级到 JUnit 5。
    【解决方案3】:

    JUnit 通过反射访问您的测试方法。 SecurityManager 可以控制对私有方法的访问。因此,JUnit 仅对框架访问的任何内容使用公共方法和字段。

    简而言之:如果 SecurityManager 处于活动状态且不允许访问私有方法,JUnit 将无法运行私有测试方法。

    【讨论】:

    【解决方案4】:

    试试

    @Test
    public void testAdd(){ }
    

    你的 testAdd 方法是私有的,它不能这样做。

    【讨论】:

    • 是的,这就是我想了解的为什么只有私有而不是公共的。我想我得到了答案,因为 JUnit 框架从外部测试类调用测试方法,因此必须将其定义为公共。但是出现的另一个问题是:我们如何隐藏任何我们不想从外部测试类访问的方法?
    • 你有没有想过如何隐藏测试类?
    猜你喜欢
    • 2016-08-29
    • 1970-01-01
    • 2014-05-16
    • 2012-01-04
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    相关资源
    最近更新 更多