0

我目前正在编写 2 个模块之间的集成测试:

  • 模块 A - 包含一个 REST 服务,可以通过 maven 插件进行 dockerized
  • 模块 B - 包含依赖模块 A docker 启动和运行的集成测试

所以我使用了包含预集成测试阶段和集成后测试的故障安全插件。

在预集成测试中,我启动了 docker,在所有子模块的所有集成测试完成后,我想杀死那些 docker。

在我使用的 docker 插件(fabric8)中,还有两个阶段,我在上述阶段中使用了 docker:start 和 docker:stop

当我运行整个项目时出现问题,在模块 B 测试运行之前,码头工人在模块 A 中被杀死,所以我想如果我可以告诉持有它们的父模块,例如:

  • 启动模块 B docker:start 插件
  • 运行所有项目的集成测试
  • 启动模块 B docker:stop 插件

它真的可以解决我的问题,但是有没有办法从父模块调用子模块的阶段,甚至被尊崇,从子模块将子模块阶段附加到父模块阶段

4

2 回答 2

0

据我所知,Maven 无法暂停模块的构建,直到满足另一个模块中的条件。Maven 在构建另一个子模块之前完全运行一个子模块的构建。

但是,您可以Module B依赖于Module A(甚至依赖于其中的一组测试类),因此您可以在构建中启动 REST 服务,Module B作为集成测试的一部分。

于 2017-08-12T18:17:21.023 回答
0

据我了解您的设置,构建 Module A与启动/停止容器无关;因此,Module A不应该这样做。

相反,容器应该分别在Module B'spre-integration-testpost-integration-testPhases 中启动和停止。毕竟,Module B'integration-test阶段需要一个正在运行的容器,而不是Module A.

如果您不习惯 Maven 的(自以为是的)做事方式,这似乎是不必要的限制,但 Maven 只是强迫您做正确的事情。可以这样想:如果将来另一个Module C也需要一个正在运行的 docker 容器,例如,为了运行一些其他测试,你不会想要回收单个 docker 容器(由 开始Module A)。由于这种风险Module BModule C以有趣的方式交互,每个模块都应该有自己的 docker 容器来工作。

于 2017-08-12T21:16:43.160 回答