2017-02-15 115 views
2

到目前爲止,我根據包名或類名排除某些類。有什麼辦法可以排除下面給出的Enums嗎?從代碼覆蓋範圍中排除枚舉類?

package com.*; 

public enum Quality { 
    high,normal,low; 
} 

覆蓋範圍我使用maven-surefire插件與JUnit和JMockit。而我的報道的設置是這樣

<build> 
<plugins> 
.... 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.18.1</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.maven.surefire</groupId> 
      <artifactId>surefire-junit4</artifactId> 
      <version>2.18.1</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <systemPropertyVariables> 
      <coverage-excludes>com.test.*,*IT.java</coverage-excludes> 
     </systemPropertyVariables> 
    </configuration> 
</plugin> 
.... 
</build> 
<dependencies> 
    .... 
     <dependency> 
      <groupId>org.jmockit</groupId> 
      <artifactId>jmockit</artifactId> 
      <version>1.17</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jmockit</groupId> 
      <artifactId>jmockit-coverage</artifactId> 
      <version>1.17</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
     </dependency> 
    ....  
    </dependencies> 
+0

爲什麼要排除枚舉?當然,如果你的一些生產代碼使用這些枚舉,它們將被覆蓋,否則它會提示你沒有使用某個值。 – GauravJ

回答

1

排除屬性接受一個正則表達式。您可以按照您的應用程序代碼約定使得所有枚舉有他們的名字,如QualityEnum.java一個共同的模式,那麼你可以申請一個正則表達式過濾排除

<exclude>%regex[*Enum.java], com.test.*</exclude> 

確保其他非枚舉類避免這個約定。或者,在每個模塊中都有一個專用子包用於枚舉,並排除子包

+0

是的,我可以做到這一點。但是我想根據它的內容排除名稱後綴。如果我想排除抽象類,引入另一個修復後模式,但是建議很好! – mavi

+1

我會認爲這將涉及爲surefire寫一個新的排除過濾器實現,可以做InstanceOf操作@mavi –