[英]PMD custom junit method naming rule not working
我在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表達式的開始處,選擇文檔root的所有后代,因此選擇文件中的所有節點。 因此, //ClassOrInterfaceDeclaration
選擇文件中該類型的所有節點,而不一定選擇一個包含違反節點的節點。
['.*PrincipalRepository']
該謂詞始終為真,因為任何非空字符串都是真實的。 通過使用boolean
函數將字符串轉換為boolean可以評估謂詞['foo']
,如果字符串非空,則產生true()
。 (這里的意思是在@Image
屬性中測試類的名稱)
因此,該謂詞基本上不會測試任何內容。 效果是,只要發現違規的文件在任何地方包含某些 ClassOrInterfaceDeclaration的地方(非常頻繁),您的violationSuppressXPath
抑制該違規。
要使其正常工作,您可以將其替換為
./ancestor::ClassOrInterfaceDeclaration[@Image = 'PrincipalRepository']
請注意,不幸的是,XPath 1.0不支持正則表達式,因此您無法進行正則表達式測試(盡管您可以使用contains
或模仿ends-with
如該答案所示 )。 在這種情況下,我認為像您想出的@SuppressWarnings("PMD.MethodNamingConventions")
更為合適。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.