maven surefire插件不尊重<groups>标签</groups>

时间:2013-06-24 13:02:48

标签: junit categories maven-surefire-plugin maven-failsafe-plugin

我想在junit中使用@category来帮助区分我的单元和集成测试。 我创建了两个名为UnitTest和IntegrationTests的接口。 我使用@Category(UnitTest.class)和@Category(IntegrationTest.class)注释我的Test类和测试方法。

我为我的模块配置了maven sure fire和maven fail安全插件。

pom文件看起来像这样

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/maven-v4_0_0.xsd">

 <modelVersion>4.0.0</modelVersion>

 <groupId>mygroup</groupId>
 <artifactId>my-parent</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>pom</packaging>
 <name>My Parent Module</name>
 <properties>
  <skipTests>false</skipTests>
  <skipITs>true</skipITs>
 </properties>

 <build>
  <plugins>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.12</version>
    <configuration>
     <skipITs>${skipITs}</skipITs>
     <groups>com.myproject.IntegrationTest</groups>
     <includes>
      <include>**/*.java</include>
     </includes>
    </configuration>

    <executions>
     <execution>
      <id>failsafe-integration-tests</id>
      <phase>integration-test</phase>
      <goals>
       <goal>integration-test</goal>
      </goals>
     </execution>
    </executions>
   </plugin>

   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12</version>

    <configuration>
     <groups>com.myproject.UnitTest</groups>
     <excludedGroups>com.myproject.IntegrationTest</excludedGroups>
     <includes>
      <include>**/*.java</include>
     </includes>
     <skipTests>${skipTests}</skipTests>
     <systemProperties>
      <property>
       <name>targetURI</name>
       <value>${targetURI}</value>
      </property>
     </systemProperties>
    </configuration>
   </plugin>
  </plugins>
 </build>
</project>

当我运行mvn clean install(我希望单独运行单元测试(maven sure fire plugin)和集成测试(maven故障安全)被跳过)时,这似乎正常。

但是,奇怪的是,maven肯定的火插件不尊重标签,我最终运行测试将@Category(UnitTest)和没有任何一个 类别也是如此。但是,正在跳过使用@IntegrationTest的测试。

我认为除了@unitTests类别之外的所有测试都将被跳过。

我尝试从确定的fire插件配置中删除com.myproject.IntegrationTest,并且@category(IntegrationTest.class)的测试也开始运行。

这是surefire插件中的错误吗?根据文档,只应运行具有指定类别的测试。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

尝试升级到2.12.1(或更高版本,最新版本为2.15)。 2.12有以下错误:

SUREFIRE-832: JUnit categories only work when junit47 provider is explicitly set

如果无法升级,请明确指定junit提供程序,请参阅Manually specifying a provider on page Using JUnit