26
在JUnit测试用例中,由@Rule
注释的字段必须是公开的。它打破了常见的Java编码约定(所有类成员变量都不应该公开)。为什么JUnit需要这个?为什么JUnit中的@Rule注释字段必须公开?
的文档@Rule
:https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Rule.java
在JUnit测试用例中,由@Rule
注释的字段必须是公开的。它打破了常见的Java编码约定(所有类成员变量都不应该公开)。为什么JUnit需要这个?为什么JUnit中的@Rule注释字段必须公开?
的文档@Rule
:https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Rule.java
的JUnit运行需要反思访问现场运行规律。如果该字段是私密的,则访问将抛出IllegalAccessException
。
另一种选择是让运行者在运行规则之前将私人访问权限修改为公共访问权限。但是,如果启用了安全管理器,则可能会导致问题。
如果你想避免在您的测试类的公共字段,你可以从JUnit的4.11注释方法,返回一个Rule
与@Rule
或@ClassRule
。
+1您也可以使用@Rule注解一个方法,这样可以避免这个问题。你应该把这个添加到你的答案中。 –
谢谢马修,我不知道。 4.11显然是新功能。 –
@KErlandsson - 你完全确定吗?这就是JUnit API文档所陈述的:“一个字段必须是公共的,而不是静态的,并且是TestRule的子类型(首选)或MethodRule” – dziki