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