我想借助 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插件中的错误吗,根据文档,只应运行具有指定类别的测试。
我在这里错过了什么吗?