java - Junit @Rule 和 Maven Checkstyle 插件

标签 java maven junit checkstyle

联合@Rulesmaven-checkstyle-plugin似乎彼此不一致。

如果 @Ruleprivate 或 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.

所以两个问题:

  1. 如果我想继续使用 @Rule 注释,有什么方法可以在本地或在测试中抑制此警告,而无需全局禁用 checkstyle 规则。
  2. 有谁知道为什么 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/

相关文章:

Java 字符集InputStreamReader、文件 channel 差异

Java Nashorn 引擎 ArrayNode 处理

java - 如何重构超过 50000 行的 Java 文件?

java - GC(分配失败)VS OutOfMemoryError 异常

java - 使用 spring mvc 集成测试时 Spring security taglib 不可见

java - SoapUI maven 中的源代码

java.lang.IllegalAccessError : class javax. xml.parsers.SecuritySupport12 无法访问其父类(super class) javax.xml.parsers.SecuritySupport

java - 让简单的 JUnit 测试在 Android Studio 中运行

java - 类未找到异常 : While Executing Ant Script for JUNIT?

java - 如何为 mule 自定义变压器编写单元测试用例