联合@Rules和 maven-checkstyle-plugin似乎彼此不一致。
如果 @Rule
是 private
或 package-private 那么结果是:
java.lang.Exception: The @Rule 'someRule' must be public.
at org.junit.internal.runners.rules.RuleFieldValidator.addError
然而,如果 @Rule
被设置为 public
,checkstyle 会报错:
[INFO] --- maven-checkstyle-plugin:2.15:checkstyle (checkstyle-test) @ web-edge-server ---
[INFO] Starting audit...
SomeTest.java: Variable 'someRule' must be private and have accessor methods.
所以两个问题:
- 如果我想继续使用
@Rule
注释,有什么方法可以在本地或在测试中抑制此警告,而无需全局禁用 checkstyle 规则。 - 有谁知道为什么 junit 要求
@Rule
公开?这似乎是不必要的,因为在任何情况下都可以使用反射来访问它。
编辑:此 SO question 特别涵盖了第 2 项.
最佳答案
在 Checkstyle 6.5 中 VisibilityModifier
检查获得的新属性 ignoreAnnotationCanonicalNames
默认设置为 org.junit.Rule
,因此 @Rule
字段不应在此检查中触发违规。
根据 release history page , Checkstyle Maven Plugin 2.15 在底层使用 Checkstyle 6.1.1,所以将插件更新到 2.17 就足够了。
关于java - Junit @Rule 和 Maven Checkstyle 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34953148/