为啥 JUnit 中的 @Rule 注释字段必须是公开的?
Posted
技术标签:
【中文标题】为啥 JUnit 中的 @Rule 注释字段必须是公开的?【英文标题】:Why @Rule annotated fields in JUnit has to be public?为什么 JUnit 中的 @Rule 注释字段必须是公开的? 【发布时间】:2012-12-29 10:09:14 【问题描述】:在 JUnit 测试用例中,@Rule
注释的字段必须是公共的。它打破了常见的 Java 编码约定(所有类成员变量都不应该是公共的)。为什么 JUnit 需要这个?
@Rule
的文档:https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Rule.java
【问题讨论】:
【参考方案1】:JUnit 运行器将需要以反射方式访问该字段以运行规则。如果该字段是私有的,则访问将抛出IllegalAccessException
。
另一种选择是让运行者在运行规则之前将访问权限从私有修改为公共。但是,如果启用了安全管理器,这可能会导致问题。
如果您想避免在测试类中包含公共字段,您可以从 JUnit 4.11 中注释返回 Rule
和 @Rule
或 @ClassRule
的方法。
【讨论】:
+1 您还可以使用@Rule 注释方法,这样可以避免问题。您应该将此添加到您的答案中。 谢谢马修,我不知道。显然是 4.11 中的新功能。 @KErlandsson - 你完全确定吗?这就是 JUnit API 文档所说的:“字段必须是公共的,而不是静态的,并且是 TestRule(首选)或 MethodRule 的子类型” @dziki 你指的是什么?我确定到底是什么?以上是关于为啥 JUnit 中的 @Rule 注释字段必须是公开的?的主要内容,如果未能解决你的问题,请参考以下文章