我的父pom包含 maven-surefire-plugin
和 maven-failsafe-plugin
配置定义 <groups>
和 <excludedGroups>
params params params在下面使用我的接口 com.adam.testutil.IntegrationTest
for junit 4 @Category
注释,以标记任何作为集成测试的测试。
父pom下的所有模块(不仅仅是具有集成测试的模块)都需要com.adam.testutil.IntegrationTest
在其classPath上,以便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.clable-尽管有人阅读代码会想知道发生了什么。
我曾希望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执行,哪些测试由FailSafe执行。
在这种情况下,您可以使用命名约定。FailSafe的默认值为文档中描述:
<includes>
<include>**/IT*.java</include>
<include>**/*IT.java</include>
<include>**/*ITCase.java</include>
</includes>
确定,默认值为:
<includes>
<include>**/Test*.java</include>
<include>**/*Test.java</include>
<include>**/*TestCase.java</include>
</includes>
如果 ..您的大多数模块需要.. 接口,您可以在单个模块中声明您的IntegrationTest
(尽管我建议不只是一个接口但是,请尝试将与该接口相关的内容以及该模块相关的内容)。让我们用名称integration-test
称其为工件。
我希望将其声明为父pom中的依赖性 模块会自动继承它,但这将创建一个圆形 依赖性问题停止运行MVN。
- ,在使用
<dependencyManagement>
这样做可以更好地使用integration-test
伪像版本的pom.xml
中的依赖性并不是必须的。在文档中阅读有关它的更多信息。
实际上,即使模块中没有单元或集成测试,也 该模块仍然必须声明依赖项。
- 如果是这种情况,您只需要在此模块的pom.xml中声明
integration-test
伪像的依赖。
我还必须制作包含的模块 com.adam.testutil.integrationTest构建顺序中的第一个模块, 否则,它将在任何新的 系统
- 反应堆分类要照顾在项目中构建模块中构建模块的顺序,其中成功构建它们所依赖的模块后构建了依赖模块。您可以在这里了解更多信息。因此,您的
integration-test
将在同一项目中取决于它的任何模块之前构建。
实际上,我不特别想创建一个新的模块 提供集成测试。如果Junit拥有 包括一个合适的org.junit.integrationTest类。
那么,某处有一个方便的界面吗?我只能放一个 在我的父母pom中对它的依赖性,一切都会好起来的。
- 除非您公开并证明
IntegrationTest
接口有用,我怀疑它是否可以包含在junit
LIB中。在某个地方方便的接口,您的界面IntegrationTest
试图做什么,这是最终的问题。 - 此后,如果可行(接受)将其包括在任何测试范围库中,则可能非常方便地将Lib的依赖性导入您的父级
pom.xml
。 - 直到那时,我仍然建议您使用
integration-test
单独的模块方法。