2013-03-05 50 views
8

我有一個Maven項目,目錄/src/test/java/test/com/mycompany/myproduct/android/viewtype2fragmentmapper/中有一個測試用例DefaultViewTypeToFragmentMapperTest.javacobertura-maven-plugin不包括配置

我想將這個測試用例從單元測試覆蓋率計算中排除。爲了實現這樣的結果,我可以這樣來配置插件:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>cobertura-maven-plugin</artifactId> 
    <version>2.5.2</version> 
    <configuration> 
     <formats> 
      <format>html</format> 
      <format>xml</format> 
     </formats> 
     <instrumentation> 
      <excludes> 
       <exclude>test/co/**/*.class</exclude> 
      </excludes> 
     </instrumentation> 
    </configuration> 
</plugin> 

但我仍然看到在覆蓋報告中的上述類。

我該如何解決這個問題,使測試用例沒有出現在報告中,並且它的覆蓋率(根據報告爲0%)未被考慮在內?

+2

您是否將cobertura-maven插件配置爲報告或構建的一部分?如果您配置爲報告,請使用'mvn site'。如果你想執行'mvn cobertura:cobertura',請配置爲build。請參閱我的答案http://stackoverflow.com/questions/15133822/cant-use-custom-ruleset-in-maven-pmd-plugin-5-0-2/15153145#15153145瞭解更多信息。 – 2013-03-06 06:47:16

+0

我將它配置爲''節點的一部分,我只在'mvn site'的範圍內使用。 – 2013-03-06 10:35:26

回答

6

您應該使用<ignore>標記。

<configuration> 
    <instrumentation> 
    <ignores> 
     <ignore>com.example.boringcode.*</ignore> 
    </ignores> 
    </instrumentation> 
</configuration> 

<exclude><instrumentation>使用簡單排除從你的插裝包。在這種情況下,沒有什麼是因爲你沒有做任何事情。請參閱Mojo Maven Cobertura Plugin docs here

+0

我試過了,它沒有幫助。 – 2013-03-05 22:21:57

+0

好的,讓我們回到您的排除聲明。什麼是test/co/**/*。class給你?您試圖排除的測試不在此包裝結構內。 – ninnemannk 2013-03-05 22:28:33

+0

該文檔沒有真正解釋'exclude'或'ignore'之間的區別。 – FrustratedWithFormsDesigner 2014-10-07 19:15:33

5

這是一個錯字嗎?

<exclude>test/co/**/*.class</exclude>

co應該是com

順便說一下,<ignores>指示Cobertura忽略對匹配忽略正則表達式的任何方法的任何調用。它會不是在instrumention期間跳過這些類。要排除類別的檢測,應使用<excludes>

+1

不,不是。 'test.co.mycompany。*'包名是正確的。 – 2013-03-06 06:09:36

+0

那麼您的文件夾名稱與該軟件包名稱不匹配。你需要把「com」 你的帖子說代碼在「/ src/test/java/test/com/mycompany/myproduct/android」 – 2013-07-15 22:19:37

4

你不應該的.class追加如下例

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>cobertura-maven-plugin</artifactId> 
    <version>2.5.2</version> 
    <configuration> 
     <formats> 
      <format>html</format> 
      <format>xml</format> 
     </formats> 
     <instrumentation> 
      <excludes> 
       <exclude>test/co/**/*</exclude> 
      </excludes> 
     </instrumentation> 
    </configuration> 
</plugin> 

我希望這可以幫助。

+0

我試過了。不幸的是,它不起作用。 – 2013-03-07 16:58:27

+0

刪除.class解決了這個問題 – jkerak 2016-12-01 14:11:15

8

經過很多嘗試和失敗,我得到它的工作。

  1. 編輯pom。
  2. MVN清潔測試編譯
  3. MVN的Cobertura:的Cobertura
  4. 從Firefox重新打開頁面。 (請確保該頁面沒有被緩存)

我得到了它的工作:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>cobertura-maven-plugin</artifactId> 
    <version>2.6</version> 
     <configuration> 
      <instrumentation> 
       <excludes> 
        <exclude>aaa/**/*.class</exclude> 
        <exclude>com/test/bbb/**/*.class</exclude> 
       </excludes> 
      </instrumentation> 
     </configuration> 
</plugin> 

更改「AAA」與包名稱的開頭被排除。 使用要從報告中排除的包名稱更改'bbb'。

我希望它能幫助, 馬克·安德魯

2

我了兩個鐘頭我的生活越來越排除了的Cobertura被排除在外,但終於成功了。

我發現的解決方案是用儀器&排除對的Cobertura-行家-插件插件配置必須在構建/插件或構建POM的/ pluginManagement章,同時有必須是一個參考報告章節中的cobertura-maven插件。

這裏的缺點是,您最初從報告章節開始定義插件,否則不會生成報告。但是儀器本身並沒有從該部分的pom中獲取任何配置。你需要在構建章節中定義它。

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>cobertura-maven-plugin</artifactId> 
       <version>2.7</version> 
       <configuration> 
        <instrumentation> 
         <excludes> 
          <exclude>my/exclusion/package/**</exclude> 
         </excludes> 
        </instrumentation> 
       </configuration> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

<reporting> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>cobertura-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</reporting> 
0

除了BertKoor的答案,我想指出的是,如果你直接執行mvn cobertura:coberturamvn cobertura:cobertura-integration-test,您的報告將仍然包括在你的目標目錄中發現的所有儀表類覆蓋,據報道here

如果是這種情況,請確保您以從以前的版本清理目標目錄第一,mvn **clean** cobertura:cobertura然後儀器和運行測試。