2015-06-23 93 views
0

我正在開發Java/Maven項目。我使用mvn test來運行我的測試套件。但是,在這種情況下,所有斷言都已啓用。不幸的是,這會使一些操作的時間從log(n)增加到n^2,這是相當不方便的。更重要的是該操作在依賴關係packageA中定義,而我在packageB上工作。使用普通的Java,我可以添加-ea:packageB...來只啓用我實際需要的斷言。是否可以使用pom.xml的內容或mvn的命令行參數來實現此行爲?我知道我可以禁用全部斷言,但我寧願保留包中的斷言,我實際上正在處理...調整maven測試的斷言

+0

如果重構你的代碼是可能的,你可以嘗試使用的東西[類似在這裏解釋](http://stackoverflow.com/questions/20857658/dynamic-method-dispatch/20857998#20857998)其中你有基本的斷言在基類和所有的斷言在某些情況下在調度的對象中省略。通過maven配置文件,你可以決定如果你想要所有的斷言或只是基本的。一般來說,你應該將你的單元測試分成[categories](http://www.hascode.com/2012/12/running-categorized-tests-using-junit-maven-and-annotated-test-suites/)雖然 –

回答

0

您可以使用surefire插件實現。但首先你需要爲不同的包指定配置文件。

使用surefire插件,您可以使用通配符或正則表達式排除或包含軟件包。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.18.1</version> 
    <configuration> 
     <includes> 
     <include>%regex[.*[Cat|Dog].*Test.*]</include> 
     </includes> 
    </configuration> 
    </plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.18.1</version> 
    <configuration> 
     <excludes> 
     <exclude>**/TestCircle.java</exclude> 
     <exclude>**/TestSquare.java</exclude> 
     </excludes> 
    </configuration> 
    </plugin> 

你可以找到更詳細的信息on this site

+0

那麼,我不想包括/排除測試用例,我想啓用/禁用'assert'語句... – hfhc2

+0

@ hfhc2有什麼區別?你爲什麼還想執行測試但沒有斷言?你期望從中獲得什麼?相反,只是排除你不想運行的軟件包。 – bhdrkn

+0

嗯,我仍然希望'assertTrue' /'assertEquals' ...語句被測試... – hfhc2

0

我使用這些屬性:

<maven.test.skip>false</maven.test.skip> 
<maven.test.failure.ignore>false</maven.test.failure.ignore> 

然後你可以離開這個斷言的是,但更改這些屬性要麼失敗的Assert.fail(),或根本不做測試。

或類似的使用CMD,比如增加一個額外的參數:

-Dmaven.test.skip =真