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

car*_*ing 8 java junit4 maven maven-failsafe-plugin

我必须把我的集成测试下src/test用我的单元测试的休息,只是一个模式区别开来,例如*Integr*Test,*ITTest或者它们可以在src/it(如开发Maven插件和使用时的情况maven-invoker-plugin)?

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

Tun*_*aki 12

您是对的,src/it旨在用于插件的集成测试.这在标准目录布局中提到.

maven-failsafe-plugin默认情况下,会寻找你的集成测试里面${project.build.testSourceDirectory},这是相同maven-surefire-plugin单元测试.默认情况下,这对应于src/test/java.遵循命名约定使集成测试不同:

<includes>
  <include>**/IT*.java</include>
  <include>**/*IT.java</include>
  <include>**/*ITCase.java</include>
</includes>
Run Code Online (Sandbox Code Playgroud)

这与单元测试的命名约定不同:

<includes>
  <include>**/Test*.java</include>
  <include>**/*Test.java</include>
  <include>**/*TestCase.java</include>
</includes>
Run Code Online (Sandbox Code Playgroud)

因此,虽然它们将驻留在相同的源文件夹(src/test/java)中,但名称的不同明显区分了它们.此外,这是默认设置,因此不需要额外的配置.

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

  • 将集成测试放在不同的源文件夹中.这将需要一些配置才能使其工作:您需要使用build-helper-maven-plugin:add-test-source目标将自定义文件夹添加为测试源文件夹.
  • 使用另一个模块(如果您有一个多模块Maven项目)只包含集成测试.


khm*_*ise 4

第一个 maven-fails-plugin 默认在另一个生命周期阶段(集成测试)运行,就像 maven-surefire-plugin (测试)一样。此外,如果您想检查集成测试是否失败,您可以配置在测试阶段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) 中运行的内容。

还有另一个重要提示。通常,集成测试通常与基础设施相关,因此有时忽略那里的故障可能很有用,这些故障可以通过使用...check的目标来简单地处理。maven-failsafe-plugin

可以在此处找到 IT 模块的示例。