【问题标题】:Changing when maven runs integration tests更改 Maven 运行集成测试的时间
【发布时间】:2012-08-17 14:42:30
【问题描述】:

我们有单元测试(mockito)和集成测试(内存数据库) 我们希望 maven将集成测试作为“mvn install”的一部分运行。 基本上我认为这意味着重新配置生命周期,以便集成测试 介于安装和部署之间。这可能吗?

这样做的原因是集成测试有些耗时 所以我们不希望它们在开发人员每次安装时都运行。但我们会 例如,喜欢在项目发布之前运行它们。

【问题讨论】:

    标签: maven integration-testing lifecycle maven-surefire-plugin


    【解决方案1】:

    检查您用于运行集成测试(可能是故障安全)的插件的文档 - 只需排除测试,或将插件执行设置为 false。

    【讨论】:

    • 现在我们的单元和集成测试都由surefire运行。例如,如果开发人员可以在他们的 settings.xml(而不是 pom)中排除 **IntegrationTest.java,这可能是一个解决方案。
    • @wytten 您应该将它们重命名为 ...IT.java,并开始使用故障安全代替恕我直言
    • 谢谢,这似乎是最好的做法,但我仍然不知道如何将它们的运行推迟到周期的后期。
    • 周期后期?还是完全关闭它们?如果您只是希望它们运行不同的阶段,请执行以下操作:将您的 IT 移动到单独的源文件夹(标准是 src/it/java),并在您的 pom.xml 中设置故障安全插件。然后,您的 IT 将在 Maven 构建过程的集成测试阶段运行。但是,当您执行 maven install 时,它仍然会运行。如果您只想在准备好时才运行它们,我建议您转而使用 Failsafe(如上所述),然后在您的 pom 中创建一个新的 maven 配置文件,其中 Failsafe 已打开
    • 我们最近发现了 junit 类别,因此无需使用故障保护即可实现这一目标。这是一个很好的介绍weblogs.java.net/blog/johnsmart/archive/2010/04/25/…
    【解决方案2】:

    集成测试是否只执行一个插件(如surefire)?如果是这样,那么bind the plugin execution to a different phase 可能更容易:

    <project>
      ...
      <build>
        <plugins>
          <plugin>
            ...
            <executions>
              <execution>
                <id>execution1</id>
                <phase>install</phase>
                <configuration>
                ...
                </configuration>
                <goals>
                  <goal>test</goal>
                </goals>
              </execution>
    

    【讨论】:

    • 这是一个有趣的想法...目前,单元测试和集成测试都由 surefire 运行,但是如果我们将集成测试移至故障安全,并将故障安全执行绑定到部署阶段,那可能会起作用。
    • 将故障保护插件绑定到集成测试阶段而不是部署阶段。
    • 您还应该能够覆盖surefire配置并独立控制这些执行,例如stackoverflow.com/questions/6760088/…。但是使用像故障安全这样的不同插件是做几乎相同事情的另一种方法。
    • 这似乎不起作用;我尝试将故障安全插件执行绑定到部署阶段,并且在部署之前它没有运行集成测试。
    • 您尝试安装阶段了吗?
    猜你喜欢
    • 2019-05-08
    • 1970-01-01
    • 2012-02-22
    • 2013-04-07
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多