簡體   English   中英

Junit @Rule和Maven Checkstyle插件

[英]Junit @Rule and Maven Checkstyle Plugin

Junit @Rulesmaven-checkstyle-plugin似乎彼此矛盾。

如果@Ruleprivate或程序包私有,則結果為:

java.lang.Exception: The @Rule 'someRule' must be public.
    at org.junit.internal.runners.rules.RuleFieldValidator.addError

但是,如果將@Rule public則checkstyle將抱怨:

[INFO] --- maven-checkstyle-plugin:2.15:checkstyle (checkstyle-test) @ web-edge-server ---
[INFO] Starting audit...
SomeTest.java: Variable 'someRule' must be private and have accessor methods.

有兩個問題:

  1. 如果我想繼續使用@Rule批注,有什么方法可以在本地或測試中禁止顯示此警告,而無需全局禁用checkstyle規則。
  2. 有誰知道為什么junit要求@Rule公開? 這似乎是不必要的,因為在任何情況下都可以使用反射使其可訪問。

編輯:此SO問題專門涵蓋了項目2。

在Checkstyle 6.5中, VisibilityModifier檢查獲得了新屬性ignoreAnnotationCanonicalNames ,默認情況下將其設置為org.junit.Rule ,因此@Rule字段不應在此檢查中觸發違規。

根據發布歷史頁面 ,Checkstyle Maven插件2.15在下面使用Checkstyle 6.1.1,因此足以將插件更新為2.17進行修復。

在您的checkstyle xml中,您可以如下指定抑制過濾器

<module name="SuppressionFilter">
  <property name="file" value="${samedir}/suppressions.xml"/>
</module>

然后,您可以從測試中明確排除該檢查:

<?xml version="1.0"?>

<!DOCTYPE suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">

<suppressions>
        <suppress checks="VisibilityModifier" files="[/\\]src[/\\]test[/\\]java[/\\]" /> 
</suppressions>

無需升級到插件版本2.17即可解決此問題的另一種方法是簡單地使用注釋來打開和關閉checkstyle:

//CHECKSTYLE:OFF
@Rule
public ExpectedException thrown = ExpectedException.none();
//CHECKSTYLE:ON

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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