我有一个包含项目规则的文件。
我希望我的单元测试方法可以在其名称中加下划线。
像myMethod_should_call_someClass_someMehod
一样。目前我有一个配置,它适用于项目中的所有文件。
我的问题是可以以某种方式配置checkstyle,因此,例如,我为所有以*Test.java
结尾的文件指定特定规则。
目前,我找到的唯一解决方案是提供SuppressionFilter
并排除所有以*Test.java
结尾的文件。但有没有办法可以为测试文件提供不同格式的MethodNameCheck
模块?
答案 0 :(得分:18)
您必须定义MethodName检查两次,其中一个实例检查常规方法,另一个检查测试方法。请注意id
属性,我们将使用该属性将检查限制在各自的域中:
<module name="MethodName">
<property name="id" value="MethodNameRegular"/>
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
</module>
<module name="MethodName">
<property name="id" value="MethodNameTest"/>
<property name="format" value="^[a-z][a-zA-Z0-9_]*$"/>
</module>
接下来,必须针对测试方法禁止常规检查,反之亦然。只有在您有区分这两种类的标准时,这才有效。我使用Maven directory convention,它将常规类放在src/main
下,测试类放在src/test
下。这是抑制过滤器文件:
<!DOCTYPE suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
<suppressions>
<suppress files="[\\/]src[\\/]test[\\/].*" id="MethodNameRegular" />
<suppress files="[\\/]src[\\/]main[\\/].*" id="MethodNameTest" />
</suppressions>
答案 1 :(得分:2)
以 barfuin's answer 为基础,我不想让(还)另一个 XML 文件四处飘散。但是,可以直接在 CheckStyle XML 配置文件中配置抑制:
<module name="SuppressionSingleFilter">
<metadata name="net.sf.eclipsecs.core.comment" value="Suppress MethodNameMain check on unit tests"/>
<property name="files" value=".*[\\/]src[\\/]test[\\/]"/>
<property name="id" value="MethodNameRegular"/>
</module>
<module name="SuppressionSingleFilter">
<metadata name="net.sf.eclipsecs.core.comment" value="Suppress MethodNameTest check except on unit tests"/>
<property name="files" value=".*[\\/]src[\\/](?!test[\\/])"/>
<property name="id" value="MethodNameTest"/>
</module>
(这是两个 MethodName
检查的补充。)