1

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

我为我的模块配置了一个 maven sure fire 和 maven fail safe 插件。

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 fail safe))时,这似乎很好。

但是,奇怪的是 maven sure fire 插件不尊重标签,我最终将运行测试将 @Category(UnitTest) 和没有任何类别的测试。但是,使用 @IntegrationTest 的测试将被跳过。

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

我尝试从安全的插件配置中删除 com.myproject.IntegrationTest 并且使用@category (IntegrationTest.class) 的测试也开始运行。

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

我在这里错过了什么吗?

4

1 回答 1

0

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

SUREFIRE-832:JUnit 类别仅在显式设置 junit47 提供程序时才有效

如果您无法升级,则显式指定 junit 提供程序,请参阅使用 JUnit 页面上的手动指定提供程序

于 2013-06-24T16:08:35.480 回答