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

Where should the integration tests be stored when using the maven-failsafe-plugin?

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

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

你是对的 src/it 旨在用于插件的集成测试。 Standard Directory Layout.

中提到了这一点

默认情况下,maven-failsafe-plugin 会在 ${project.build.testSourceDirectory}, which is the same as the maven-surefire-plugin for unit tests. By default, this corresponds to src/test/java. The integration tests are made distinct by following a naming convention:

中查找您的集成测试
<includes>
  <include>**/IT*.java</include>
  <include>**/*IT.java</include>
  <include>**/*ITCase.java</include>
</includes>

与单元测试的 naming convention 不同:

<includes>
  <include>**/Test*.java</include>
  <include>**/*Test.java</include>
  <include>**/*TestCase.java</include>
</includes>

因此,虽然它们驻留在同一个源文件夹中 (src/test/java),但名称的差异可以清楚地区分它们。此外,这是默认设置,因此不需要额外的配置。

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

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

默认情况下,第一个 maven-fails-plugin 运行s 在另一个生命周期阶段(集成测试),如 maven-surefire-plugin(测试)所做的那样。此外,如果您想检查集成测试是否失败,您可以在 post-integration-test 测试阶段将 maven-failsafe-plugin 配置为 运行 verify 目标。这可以自由配置。

我想到了一个问题。你有 10 个模块,现在你想进行集成测试?它们属于哪个模块?所以最好有一个单独的模块,因为它们属于 10 个模块中的 none。

除此之外,maven-surefire-plugin 已在默认生命周期中配置。是的,补充目标将是一个想法,但它会使用户混淆以在不同关系中使用相同的插件。所以关注点分离在这里很重要。除了整个默认配置之外...这些插件共享更大的代码库但存在差异...

此外,Tunaki 已经提到的是 pre-integration-test,用于设置服务器等 integration-test 以及在 post-integration-test 阶段关闭 services/servers 等。这在单元测试中永远不会发生。

使用单独的模块通常可以更简单地设置 IT,这意味着具有与单元测试不同的依赖项(类路径)。例如像 Arquillian.org 这样的东西在单元测试中从未使用过。这不能在单个模块中处理……这里的关注点分离也是一件好事……

此外,默认情况下无法并行化集成测试,而单元测试可以根据定义并行化,否则它们不是单元测试。

那么文件夹布局呢?在集成测试模块中,您可以简单地使用 src/test/java 文件夹,这意味着您不需要补充配置等(例如通过 build-helper-maven-plugin 等),这使得它更容易并遵循更多约定超过配置范例。

不要忘记,您可以更好地控制构建中 运行ning 的内容 (CI)..

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

可以找到 IT 模块的示例 here