为什么 JUnit 中@Rule带注释的字段必须是公开的?

2022-09-01 09:01:02

在 JUnit 测试用例中,注释的字段必须是公共的。它打破了常见的Java编码约定(所有类成员变量都不应该是公共的)。为什么 JUnit 需要这个?@Rule

文档 : https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Rule.java@Rule


答案 1

JUnit 运行程序需要以反射方式访问字段才能运行规则。如果该字段是私有的,则访问将抛出 .IllegalAccessException

另一种选择是让运行者在运行规则之前将访问权限从私有修改为公共。但是,如果启用了安全管理器,这可能会导致问题。

如果要避免在测试类中使用公共字段,可以从 JUnit 4.11 注释返回 with 或 .Rule@Rule@ClassRule


答案 2

推荐