我正在运行目标failsafe:对多模块项目进行集成测试,格式为:
父:
-------- Module_A
-------- Module_B
考虑通过Test_B1_IT(在模块B中)测试Class_A1中的内容(在模块A中)。
您现在更改了Class_A1,现在测试失败了。但是,如果你运行目标
mvn failsafe:integration-test
测试仍将通过 - 在您运行部署目标之前,不会反映更改。我相信目标是使用存储库中的jar,而不是当前reactor的最新版本。
如果你运行集成测试它可以工作......但它似乎也运行所有单元测试(似乎没有办法跳过单元测试并运行_IT集成测试)。
我也看到它适用于目标集成测试,或者如果我在故障保护目标之前添加“编译”。但是,第一个选项运行所有测试(单位+积分)
这是故障安全插件的问题还是maven处理多模块项目中的依赖关系的方式?最好的方法是添加编译选项吗?
答案 0 :(得分:1)
首先,您可以在命令行上通过given skip跳过单元测试,如:
mvn -Dmaven.test.skip=true lifecycle
如果您想运行集成测试,则不应调用failsafe: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 ...
您撰写的关于使用该模块的内容是真实的。如果您只是调用一个目标,依赖关系将针对本地存储库解决,当然不是通过反应堆,因为在这种情况下没有reactor运行。
尽管如此,集成测试阶段假定所有单元测试都已经运行,因此像Maven在其生命周期中那样首先运行单元测试是有意义的。但是你可以通过使用一些属性来详细控制它来影响它。但通常运行单元测试应该不是问题,因为单元测试必须快速运行。