2

我正在使用以下格式在多模块项目上运行目标故障安全:集成测试:

父级:
--------Module_A
--------Module_B

考虑一个通过 Test_B1_IT(在模块 B 中)测试 Class_A1(在模块 A 中)中的某些内容。

您现在更改 Class_A1 并且测试现在失败。但是,如果您运行目标

mvn failsafe:integration-test

测试仍将通过 - 在您运行部署目标之前不会反映更改。我相信目标是使用存储库中的 jar,而不是当前反应堆的最新版本。
如果您运行 integration-test 它可以工作......但它似乎也运行所有单元测试(似乎没有办法跳过单元测试并运行 _IT 集成测试)。

我还看到它适用于目标集成测试,或者如果我在故障安全目标之前添加“编译”。但是,第一个选项运行所有测试(单元 + 集成)

这是故障安全插件的问题,还是 maven 处理多模块项目中依赖项的方式?最好的方法应该是添加编译选项吗?

4

1 回答 1

1

第一件事是您可以通过在命令行上简单地跳过单元测试,例如

mvn -Dmaven.test.skip=true lifecycle

如果你喜欢运行集成测试,你不应该调用 failsafe:integration-test 目标,因为你错过了 pre-integration-test 阶段和 post-integration-test 生命周期阶段。

更好的方法是通过调用使用 Maven 的反应器

mvn -D... -am -pl Module_A  lifecylcephase

-am 开关将确保编译所有相关模块。

此外,我建议将集成测试放入一个单独的模块中,这会使生活更轻松,例如:

 +-- root 
      +--- pom.xml
      +--- mod1 (pom.xml)
      +--- mod2 (pom.xml)
      +--- mod-it (pom.xml)

mod-it 可以通过使用如下配置文件来激活:

mvn -Prun-its ...

您写的关于使用该模块的内容是正确的。如果您只是调用一个目标,则依赖关系将根据本地存储库解决,当然不是通过反应器,因为在这种情况下没有反应器在运行。

尽管如此,集成测试阶段假定所有单元测试都已经运行,因此首先运行单元测试是有意义的,就像 Maven 在其生命周期中所做的那样。但是您可以通过使用一些属性来详细控制它来影响它。但是通常运行单元测试应该不是问题,因为单元测试必须快速运行。

于 2012-06-14T16:53:39.497 回答