[英]Junit @Rule and Maven Checkstyle Plugin
Junit @Rules和maven-checkstyle-plugin似乎彼此矛盾。
如果@Rule
为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规则。 @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.