使用maven-failsafe-plugin时应该在哪里存储集成测试?

时间:2016-06-23 17:21:17

标签: java maven junit4 maven-failsafe-plugin

我是否必须将src/test下的集成测试与其他单元测试放在一起,只需通过*Integr*Test*ITTest等模式区分它们,或者它们是否可以在src/it(与开发Maven插件并使用maven-invoker-plugin时的情况一样)?

我问这个是因为,对我来说,如果单元和集成测试都在同一个地方,它看起来不够干净(即使它们是通过Maven配置文件控制的)。

2 个答案:

答案 0 :(得分:12)

你是对的,src/it旨在用于插件的集成测试。这在${project.build.testSourceDirectory}中提到。

默认情况下,maven-failsafe-plugin将在which is the samenaming 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)中,但名称的不同明显区分了它们。此外,这是默认设置,因此无需额外配置。

那就是说,你可以有其他选择:

  • 将集成测试放在不同的源文件夹中。这需要一些配置才能使其正常工作:您需要使用Android Developers blog目标将自定义文件夹添加为测试源文件夹。
  • 使用另一个模块(如果您有一个多模块Maven项目),它只包含集成测试。

答案 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