【发布时间】:2016-12-09 17:05:21
【问题描述】:
我的父 pom 包含定义 <groups> 和 <excludedGroups> 参数的 maven-surefire-plugin 和 maven-failsafe-plugin 配置如下使用我的接口 com.adam.testutil.IntegrationTest 用于 JUnit 4 @Category 注释,将任何测试标记为集成测试。
父 pom 下的所有模块(不仅仅是那些具有集成测试的模块)都将在其类路径中需要 com.adam.testutil.IntegrationTest,以便确保安全插件和故障安全插件运行,否则它们会抛出 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>
【问题讨论】:
-
那么问题是项目中的每个模块都必须有一个依赖才能拉入 com.adam.testutil.IntegrationTest 这里需要什么依赖?
-
您能否详细介绍一下
IntegrationTest目前所在的位置以及您目前使用的模块结构? -
我改写了这个问题来回答你的问题。
标签: java maven integration-testing maven-surefire-plugin