【发布时间】:2012-01-16 23:15:51
【问题描述】:
为了微调哪些测试在哪些时间和哪些环境中运行,我们为 maven-surefire-plugin 设置了多个执行。我们将默认配置设置为跳过所有测试,然后为我们想要的执行启用它们。这本身对我们很有效。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>unit-tests</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<skip>false</skip>
<includes>
<include>**/*Tests.java</include>
</includes>
<excludes>
<exclude>**/*IntegrationTests.java</exclude>
</excludes>
</configuration>
<execution>
<execution>
<id>integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<skip>false</skip>
<includes>
<include>**/*IntegrationTests.java</include>
</includes>
</configuration>
<execution>
</executions>
</plugin>
当我将 maven-cobertura-plugin 添加到组合中时,我遇到了问题。 cobertura 目标运行,并成功地装备了我的课程。但是,没有运行测试。我认为这是因为 cobertura 正在运行的测试执行是被跳过的。但是,我找不到如何指定为此执行设置的阶段和目标。当我打开所有测试时,输出似乎表明这些测试仍在这些单元测试和集成测试阶段/目标中运行。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.4</version>
<configuration>
<formats>
<format>xml</format>
<format>html</format>
</formats>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>cobertura</goal>
</goals>
</execution>
</executions>
</plugin>
我如何需要指定一个万无一失的执行,以便 cobertura 可以针对已检测的类运行它?
【问题讨论】:
-
当您在没有 Cobertura 的情况下运行测试时,您如何告诉 maven 使用不同的执行方式?您在使用个人资料吗?
-
unit-tests在常规的test阶段运行(因此,当我们执行mvn package时),而integration-tests在我们执行mvn install时运行。我认为这是因为在这些处决中指定了阶段和目标,尽管我承认这可能是我的误解。我们确实使用配置文件来启用或禁用 Cobertura,但这些似乎与在这些其他测试之间进行选择无关。