我的父pom包含maven-surefire-plugin
和maven-failsafe-plugin
配置,这些配置使用JUnit 4 <groups>
批注的接口<excludedGroups>
如下定义com.adam.testutil.IntegrationTest
和@Category
参数,以将任何测试标记为集成测试。
父pom下的所有模块(不仅仅是具有集成测试的模块)都将在其类路径上要求com.adam.testutil.IntegrationTest
,以便surefire和failsafe插件运行,否则会抛出ClassNotFoundException
。
因此,该类必须位于所有模块都必须声明为依赖项的模块中。我希望将其声明为父pom中的依赖项
因此,所有模块都会自动继承它,但这会导致循环依赖问题,从而导致mvn运行停止。
实际上,即使模块中没有单元测试或集成测试,该模块仍必须声明依赖项。
我还必须使包含com.adam.testutil.IntegrationTest
的模块成为构建顺序中的第一个模块,否则在任何新系统上的首次安装中都将不可用。我遇到了鸡与蛋的难题-我不能只在空白存储库中运行mvn install
,因为IntegrationTest
的依赖关系还不在本地存储库中。
实际上,我并不是特别想创建一个仅提供IntegrationTest
的新模块。如果JUnit在库中包含一个合适的org.junit.IntegrationTest
类,它将更加简单。
虽然我认为@Cateogry
是注释测试以将其标记为集成测试的好方法,但是在多模块项目中,它具有所有这些缺点。
是否可以在某个地方使用相关或适当命名的接口,而不必自己使用?
在最坏的情况下,就JUnit,@Category
,maven-surefire-plugin和maven-failsafe-plugin而言,我可以在JDK中使用一个接口,例如java.lang.Cloneable-尽管任何阅读该代码的人都会想知道到底发生了什么。
我曾希望JUnit会有所帮助,但找不到任何有用的东西。
我可以在父pom中依赖第三方库,一切都会好起来的。
我会接受任何人建议的第三方库接口的答案,该接口的名称不会引起任何初次阅读该代码的人的直接疑问。
import org.junit.experimental.categories.Category
import com.adam.testutil.IntegrationTest
@Category(IntegrationTest.class)
public DbAndJpaIntegrationTests {
...
}
。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<excludedGroups>com.bp.gis.util.HeavyTest
</excludedGroups>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<includes>
<include>**/*.java</include>
</includes>
<groups>com.bp.gis.util.HeavyTest</groups>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
</plugin>
最佳答案
您的问题似乎暗示IntegrationTest
接口的目的仅仅是标记那些由surefire执行的测试和哪些由故障安全执行的测试。
在这种情况下,您可以使用命名约定。
故障安全的默认值为
described in the docs:
<includes>
<include>**/IT*.java</include>
<include>**/*IT.java</include>
<include>**/*ITCase.java</include>
</includes>
对于surefire,the defaults are:
<includes>
<include>**/Test*.java</include>
<include>**/*Test.java</include>
<include>**/*TestCase.java</include>
</includes>