繁体   English   中英

Junit @Rule和Maven Checkstyle插件

[英]Junit @Rule and Maven Checkstyle Plugin

Junit @Rulesmaven-checkstyle-plugin似乎彼此矛盾。

如果@Ruleprivate或程序包私有,则结果为:

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问题专门涵盖了项目2。

在Checkstyle 6.5中, VisibilityModifier检查获得了新属性ignoreAnnotationCanonicalNames ,默认情况下将其设置为org.junit.Rule ,因此@Rule字段不应在此检查中触发违规。

根据发布历史页面 ,Checkstyle Maven插件2.15在下面使用Checkstyle 6.1.1,因此足以将插件更新为2.17进行修复。

在您的checkstyle xml中,您可以如下指定抑制过滤器

<module name="SuppressionFilter">
  <property name="file" value="${samedir}/suppressions.xml"/>
</module>

然后,您可以从测试中明确排除该检查:

<?xml version="1.0"?>

<!DOCTYPE suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">

<suppressions>
        <suppress checks="VisibilityModifier" files="[/\\]src[/\\]test[/\\]java[/\\]" /> 
</suppressions>

无需升级到插件版本2.17即可解决此问题的另一种方法是简单地使用注释来打开和关闭checkstyle:

//CHECKSTYLE:OFF
@Rule
public ExpectedException thrown = ExpectedException.none();
//CHECKSTYLE:ON

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM