为什么运行单个测试时没有生成jacoco.exe - 但它是在运行所有测试时生成的?

时间:2017-01-24 11:23:14

标签: maven jacoco maven-surefire-plugin surefire jacoco-maven-plugin

我正在使用jacoco代理进行万无一失的测试。当我运行mvn verify时,会生成jacoco.exec个文件。

当我运行mvn clean verify -Dtest=com.org.MyTest -DfailIfNoTests=false时,不会生成jacoco.exec个文件。

这是我的surefire配置。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
    </configuration>
    <executions>
        <execution>
            <phase>test</phase>
            <id>testconfig</id>
            <configuration>
                <argLine>${test.jvm.options} ${jacoco.agent.argLine}</argLine>
                <skip>false</skip>
            </configuration>
            <goals><goal>test</goal></goals>
        </execution>
    </executions>
</plugin>

这是我的jacoco配置

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.5.201505241946</version>
    <configuration>
        <properties>
            <property>
                <name>listener</name>
                <value>org.sonar.java.jacoco.JUnitListener</value>
            </property>
        </properties>
    </configuration>
    <executions>
        <execution>
            <id>unit_agent</id>
            <phase>initialize</phase>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
            <configuration>
                <propertyName>jacoco.agent.argLine</propertyName>
            </configuration>
        </execution>                           
    </executions>
</plugin>

我的问题是:为什么在运行单个测试时没有生成jacoco.exe - 但是在运行所有测试时都会生成它?

1 个答案:

答案 0 :(得分:0)

mvn clean verify -Dtest=com.org.MyTest -DfailIfNoTests=false的执行日志显示类似(我使用Apache Maven 3.3.9):

[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ example ---
[INFO] Surefire report directory: /private/tmp/jacoco-example/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.org.MyTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec - in com.org.MyTest

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (testconfig) @ example ---
[INFO] Skipping execution of surefire because it has already been run for this configuration

请注意,maven-surefire-plugin执行了两次 - 一次使用标识default-test,另一次标识为testconfig的执行实际上已跳过,而只有标识testconfig的配置使用{{ 1}}。

${jacoco.agent.argLine}的定义更改
maven-surefire-plugin

解决了这个问题。