我有一个使用jacoco版本0.7.1.201405082137和maven 3.0.5的项目。在项目中,我有一些单元测试,以及一些使用Arquillian创建的测试。
为了区分单元测试和集成测试,我创建了两个junit类别:一个叫做FastTest,另一个叫做SlowTest。
在用于运行所有测试的Maven配置文件中,我配置了此插件:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<groups>SlowTest,FastTest</groups>
<systemPropertyVariables>
<arquillian.launch>wildfly_8_x</arquillian.launch>
</systemPropertyVariables>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${version.jacoco}</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
当我将两个类别都保留时,我只会得到用SlowTest注释的测试的覆盖率。但是所有测试都在运行。如果我只运行用FastTest注释的那些,我也将获得它们的正确覆盖。
运行两种测试时,如何设置jacoco以获得正确的覆盖范围?
小提示:
<groups>
标记采用完整的类名。所以我的问题是:SlowTest.class
接口是否放在默认包装中?如果不是,则应提供完整路径,例如:<groups>com.mycompany.project.SlowTest</groups>
还有一点建议:
优良作法是区分单元测试和集成测试-从而分别运行它们。 Maven通过两个插件来实现此目的:maven-surefire-plugin
和maven-failsafe-plugin
。
首先设计为使用mvn test
运行单元测试。 Second设计用于使用mvn failsafe:integration-test
运行集成测试。此answer可能有助于阐明一些信息。