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

问题描述 投票:0回答:2

我是否必须将集成测试与其余单元测试放在

src/test
下,并通过
*Integr*Test
*ITTest
等模式来区分它们,或者可以将它们放在
src/it
中(情况就是这样)当开发 Maven 插件并使用
maven-invoker-plugin
) 时?

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

java maven junit4 maven-failsafe-plugin
2个回答
16
投票

你是对的,

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>

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

<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 项目)。

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 模块的示例。

© www.soinside.com 2019 - 2024. All rights reserved.