簡體   English   中英

PMD自定義junit方法命名規則不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM