我是否必须将src/test
下的集成测试与其他单元测试放在一起,只需通过*Integr*Test
,*ITTest
等模式区分它们,或者它们是否可以在src/it
(与开发Maven插件并使用maven-invoker-plugin
时的情况一样)?
我问这个是因为,对我来说,如果单元和集成测试都在同一个地方,它看起来不够干净(即使它们是通过Maven配置文件控制的)。
答案 0 :(得分:12)
你是对的,src/it
旨在用于插件的集成测试。这在${project.build.testSourceDirectory}
中提到。
默认情况下,maven-failsafe-plugin
将在which is the same,naming convention内查找您的集成测试,作为单元测试的maven-surefire-plugin
。默认情况下,这对应于src/test/java
。遵循naming convention:
<includes>
<include>**/IT*.java</include>
<include>**/*IT.java</include>
<include>**/*ITCase.java</include>
</includes>
与单位测试的build-helper-maven-plugin:add-test-source
不同:
<includes>
<include>**/Test*.java</include>
<include>**/*Test.java</include>
<include>**/*TestCase.java</include>
</includes>
因此,虽然它们将驻留在相同的源文件夹(src/test/java
)中,但名称的不同明显区分了它们。此外,这是默认设置,因此无需额外配置。
那就是说,你可以有其他选择:
答案 1 :(得分:4)
第一个maven-failed-plugin默认在另一个生命周期阶段(集成测试)中运行,就像maven-surefire-plugin(test)那样。此外,如果您想检查集成测试是否失败,您可以配置maven-failsafe-plugin在verify
测试阶段运行post-integration-test
目标。这可以自由配置。
我想到了一个问题。你有10个模块,现在你想进行集成测试?它们属于哪个模块?最好是拥有一个单独的模块,因为它们不属于10个模块。
除了maven-surefire-plugin已经在默认生命周期中配置。是的,补充目标是一个想法,但它会混淆用户在不同的关系中使用相同的插件。因此,关注点的分离在这里很重要。除了整个默认配置......这些插件共享更大的代码库,但存在差异......
Tunaki已经提到的内容是pre-integration-test
,用于设置服务器等等integration-test
以及在post-integration-test
阶段关闭服务/服务器等事情。这在单元测试中永远不会发生。
使用单独的模块使得设置IT通常更简单,这意味着具有与单元测试不同的依赖关系(类路径)。例如像Arquillian.org这样的东西,它从未在单元测试中使用过。这不能在一个单独的模块中处理......这里也是一件好事就是分离关注点。
此外,默认情况下集成测试不能平行,而单元测试可以按定义,否则它们不是单元测试。
那么文件夹布局呢?在集成测试模块中,您可以简单地使用src/test/java
文件夹,这意味着您不需要补充配置等(例如通过build-helper-maven-plugin等),这使得它更容易并遵循更多约定过度配置范例。
不要忘记你可以更好地控制你的构建中运行的内容(CI)..
另一个重要提示。通常,集成测试通常与基础架构相关,因此有时可以忽略那些可以通过使用maven-failsafe-plugin的check
目标来简单处理的失败....
可以找到IT模块的示例here。