【问题标题】:Maven Failsafe plugin and multi-module projects: how to use the other modules from the reactor?Maven Failsafe 插件和多模块项目:如何使用反应器中的其他模块?
【发布时间】:2012-06-14 16:08:26
【问题描述】:

我正在一个多模块项目上运行目标故障安全:集成测试,格式为:

家长:
--------模块_A
--------模块_B

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

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

mvn failsafe:integration-test

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

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

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

【问题讨论】:

    标签: maven maven-2 maven-failsafe-plugin


    【解决方案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 ...
    

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

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

    【讨论】:

    • 我也很想为集成测试创建一个新模块,但我找不到任何建议这种方法的文献。如果我这样做,实际测试会进入src/mainsrc/test 目录吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2011-03-28
    • 2014-07-27
    • 2011-03-06
    • 2011-09-03
    • 2011-07-08
    相关资源
    最近更新 更多