为什么Junit中的测试方法应该定义为公共的?

为什么Junit中的测试方法应该定义为公共的?,junit,junit4,Junit,Junit4,我正在浏览junit测试的文档,但无法理解将测试定义为公共测试的必要性。有人可以分享一些信息吗 我继续读下去 但我仍然不清楚原因 我的意思是为什么我不能写一些 @Test private void testAdd(){ } JUnit框架从测试类外部调用测试方法。如果您的测试方法是私有的,它将无法做到这一点。试试看 @Test public void testAdd(){ } 您的testAdd方法是私有的,它将无法做到这一点。JUnit通过反射访问您的测试方法。SecurityManage

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

我继续读下去

但我仍然不清楚原因

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

@Test
private void testAdd(){ }

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

试试看

@Test
public void testAdd(){ }

您的testAdd方法是私有的,它将无法做到这一点。

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

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

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

参考文件:

是的,这就是我想要理解的为什么只有私有的而不是公共的。我想我得到了答案,因为JUnit框架从测试类外部调用测试方法,因此它必须被定义为公共的。但另一个问题是:我们如何隐藏我们不想从测试类外部访问的任何方法?你知道怎么做吗隐藏测试类?明白了!但另一个问题是:我们如何隐藏我们不希望其他用户从测试类外部访问的任何测试方法?@Jagori私有测试方法的用例是什么?测试方法的目的是由JUnit框架运行,因此使用私有方法是没有用的。如果需要无法从类外部直接访问的代码,可以在测试类中编写私有的非测试方法,然后由测试方法调用。通常,测试不包括在已发布的工件中,因此无法使用。请原谅Stefan,但是我对你的评论不太清楚。你能详细说明一下Junit通过反射访问测试方法的含义吗。Junit使用反射查找所有用@test注释的方法。(请参见中的computeTestMethods())这对于JUnit 5是正确的,但对于JUnit 4(问题标记为JUnit 4)则不正确。因此,如果您想编写不公开的测试方法,请考虑升级到JUnit 5。