0

我有一个使用 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 以获得正确的覆盖率?

4

1 回答 1

0

小贴士:

  • <groups>标签采用完整的类名。所以我的问题是:SlowTest.class接口是否放在默认包中?如果不是,您应该提供完整路径,例如:<groups>com.mycompany.project.SlowTest</groups>

还有一点建议:

  • 好的做法是区分单元测试和集成测试 - 从而分别运行它们。Maven 通过两个插件来实现这一点:maven-surefire-pluginmaven-failsafe-plugin.

    First 旨在使用mvn test. 第二个旨在运行您的集成测试mvn failsafe:integration-test。这个答案可能有助于阐明一些问题。

于 2015-02-10T08:05:12.937 回答