我们的代码中常见的错误是编写
@Mock Object object;
@InjectMocks Subject subject;
而不是
@Mock private Object object;
@InjectMocks private Subject subject;
这可以防止PMD / FindBugs / IntelliJ在字段变为未使用时发出警告,并且我们的代码审查也会因“使此字段为私有”注释而膨胀。
当具有特定注释的字段没有预期的可见性时,是否有任何静态分析规则在任何工具中发出警告?
我找到了Checkstyle的VisibilityModifier,但它标记了所有非私有字段,而不仅仅是具有特定注释的字段。
答案 0 :(得分:2)
您可以在IntelliJ IDEA中使用结构搜索检查。例如,使用这样的模式:
@Mock @Modifier("packageLocal") $FieldType$ $FieldName$ = $Init$;
FieldType:min:1,max:1
FieldName:min:1,max:1
Init:min:0,max:1
答案 1 :(得分:1)
您可以使用PMD的Rule Designer创建新的XPath规则,该规则可以嵌入到PMD规则集xml文件中。我还没有将IntelliD用于IntelliJ IDEA或Jenkins,但我确定插件存在。
这是我制定的规则(未在规则设计师之外进行测试):
<rule name="NonPrivateMockAnnotation"
message="Mock anotation should be private"
class="net.sourceforge.pmd.lang.rule.XPathRule">
<description>
</description>
<properties>
<property name="xpath">
<value>
<![CDATA[
//ClassOrInterfaceBodyDeclaration[
Annotation/MarkerAnnotation/Name[
@Image = 'InjectMocks' or
@Image = 'Mock'
] and
FieldDeclaration/@Private = 'false'
]
]]>
</value>
</property>
</properties>
<priority>3</priority>
<example>
<![CDATA[
class Example {
@Mock Object object;
@InjectMocks Subject subject;
}
]]>
</example>
</rule>