gpt4 book ai didi

java - PMD 自定义 junit 方法命名规则不起作用

转载 作者:行者123 更新时间:2023-12-02 01:31:21 25 4
gpt4 key购买 nike

我在ruleSet.xml 文件中定义了以下规则:

<rule ref="category/java/codestyle.xml/MethodNamingConventions">
<properties>
<property name="junit4TestPattern" value="[a-z]*_[A-Z]{1}[a-z,A-Z]*_[A-Z]{1}[a-z,A-Z]*"/>
<property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration['.*FoobarRepository']"/>
</properties>
</rule>

但是,当运行 PMD 时,没有任何失败,但我有很多不符合 junit4 方法命名模式的方法。所有方法都用 org.junit.Test 注解需要什么来触发 junit 特定规则?

最佳答案

我不认为这是一个错误,您的 ViolationSuppressXPath 只是始终返回 true。请记住,它是使用违规节点作为表达式的上下文节点来计算的。

//ClassOrInterfaceDeclaration
在 XPath 表达式开头的

// 选择文档根的所有后代,因此文件中的所有节点。因此 //ClassOrInterfaceDeclaration 选择文件中该类型的所有节点,而不一定是包含违规节点的节点。

['.*PrincipalRepository']

该谓词始终为真,因为任何非空字符串都是真值。像 ['foo'] 这样的谓词是通过使用 boolean 函数将字符串转换为 boolean 值来计算的,如果满足以下条件,则生成 true()字符串非空。 (这里你的意思是测试类的名称,在属性@Image中)

所以基本上谓词不测试任何东西。结果是,只要发现违规的文件在任何地方包含一些 ClassOrInterfaceDeclaration(这种情况非常频繁),您的 violationSuppressXPath 就会抑制违规。

要使其工作,您可以将其替换为

./ancestor::ClassOrInterfaceDeclaration[@Image = 'PrincipalRepository']

请注意,不幸的是,XPath 1.0 不支持正则表达式,因此您无法进行正则表达式测试(尽管您可以使用 contains 或模仿 ends-with ,例如在 this answer 中)。在这种情况下,我认为您提出的 @SuppressWarnings("PMD.MethodNamingConventions") 更合适。

关于java - PMD 自定义 junit 方法命名规则不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56002416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com