【问题标题】:How to generate Jacoco integration test report using offline instrumentation?如何使用离线仪器生成 Jacoco 集成测试报告?
【发布时间】:2017-05-05 02:22:03
【问题描述】:

构建工具:Maven

使用离线检测的原因:不能删除 Powermock

问题: failsafe 和 surefire 都运行并生成报告。但是, jacoco.exec 是生成的,但 jacoco-it.exec 不是。除了 IT 之外,离线检测、覆盖和报告工作都很好。

这是我使用的maven插件配置:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>default-instrument</id>
            <goals>
                <goal>instrument</goal>
            </goals>
        </execution>
        <execution>
            <id>default-restore-instrumented-classes</id>
            <goals>
                <goal>restore-instrumented-classes</goal>
            </goals>
        </execution>
        <execution>
            <id>default-report</id>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
        <execution>
            <id>default-report-integration</id>
            <goals>
                <goal>report-integration</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <systemPropertyVariables>
            <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
        </systemPropertyVariables>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.15</version>
    <executions>
        <execution>
            <id>integration-tests</id>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
            <configuration>
                <skipTests>${skip.integration.tests}</skipTests>
            </configuration>
        </execution>
    </executions>
</plugin>

要运行测试,我使用 maven clean install。

在测试执行结束时,我得到以下输出:

[INFO] 
[INFO] --- maven-failsafe-plugin:2.15:integration-test (integration-tests) @ elune ---
[INFO] Skipping execution of surefire because it has already been run for this configuration
[INFO] 
[INFO] --- jacoco-maven-plugin:0.7.8:report (default-report) @ elune ---
[INFO] Loading execution data file C:\Projects\elune\target\jacoco.exec
[INFO] Analyzed bundle 'elune' with 4 classes
[INFO] 
[INFO] --- jacoco-maven-plugin:0.7.8:report-integration (default-report-integration) @ elune ---
[INFO] Skipping JaCoCo execution due to missing execution data file.

另一个可能的指针可能是类的去仪表化发生在单元测试运行之后但在集成测试之前。但我不知道这是对还是错:

[INFO] 
[INFO] --- jacoco-maven-plugin:0.7.8:restore-instrumented-classes (default-restore-instrumented-classes) @ elune ---
[INFO] 
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ elune ---
[INFO] Building jar: C:\Projects\elune\target\elune-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.4.2.RELEASE:repackage (default) @ elune ---
[INFO] 
[INFO] --- maven-failsafe-plugin:2.15:integration-test (default) @ elune ---
[INFO] Failsafe report directory: C:\Projects\elune\target\failsafe-reports

知道为什么 jacoco-it.exec 没有出现吗?

【问题讨论】:

    标签: maven unit-testing integration-testing code-coverage jacoco


    【解决方案1】:

    我认为带有故障安全插件的集成测试的检测并没有被纳入。restore-instrumented-classes 目标默认为在集成测试阶段之前运行的准备包阶段:http://maven.apache.org/ref/3.3.9/maven-core/lifecycles.html - 所以它可能是足以将该目标转移到集成测试后阶段:

    <execution>
      <id>default-restore-instrumented-classes</id>
      <phase>post-integration-test</phase>
      <goals>
        <goal>restore-instrumented-classes</goal>
      </goals>
    </execution>
    

    这可能就足够了。否则,您也许可以更改 surefire 插件的包含模式以包含集成测试(如果这似乎适合您的情况)。

    【讨论】:

      【解决方案2】:

      @rhinoceros.xn 这是对我有用的插件配置。但我使用mvn clean install 来运行它

              <plugin>
                  <groupId>org.jacoco</groupId>
                  <artifactId>jacoco-maven-plugin</artifactId>
                  <executions>
                      <execution>
                          <id>default-instrument</id>
                          <goals>
                              <goal>instrument</goal>
                          </goals>
                      </execution>
                      <execution>
                          <id>default-restore-instrumented-classes</id>
                          <phase>post-integration-test</phase>
                          <goals>
                              <goal>restore-instrumented-classes</goal>
                          </goals>
                      </execution>
                      <execution>
                          <id>default-report</id>
                          <goals>
                              <goal>report</goal>
                          </goals>
                      </execution>
                      <execution>
                          <id>default-report-integration</id>
                          <goals>
                              <goal>report-integration</goal>
                          </goals>
                      </execution>
                  </executions>
              </plugin>
      

      【讨论】:

      • 你很善良。感谢帮助。终于发现问题是我没有在maven-failsafe-plugin中添加配置jacoco-agent.destfile。
      【解决方案3】:

      设置短语后 jacoco-it.exec 没有出现。 命令行是: mvn clean install -Djacoco.version=0.7.8 -DfailOnError=false -Dmaven.test.failure.ignore=true

      我终于发现问题是我没有在maven-failsafe-plugin中添加配置jacoco-agent.destfile。

      <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.16</version>
              <configuration>
                <systemPropertyVariables>
                  <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
                </systemPropertyVariables>
              </configuration>
            </plugin>
      
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>2.15</version>
              <configuration>
                <systemPropertyVariables>
                  <jacoco-agent.destfile>target/jacoco-it.exec</jacoco-agent.destfile>
                </systemPropertyVariables>
              </configuration>
          <executions>
              <execution>
                  <id>integration-tests</id>
                  <goals>
                      <goal>integration-test</goal>
                  </goals>
              </execution>
          </executions>
      </plugin>
      
            <plugin>
              <groupId>org.jacoco</groupId>
              <artifactId>jacoco-maven-plugin</artifactId>
              <version>${jacoco.version}</version>
              <executions>
                <execution>
                  <id>default-instrument</id>
                  <goals>
                    <goal>instrument</goal>
                  </goals>
                </execution>
                <execution>
                  <id>default-restore-instrumented-classes</id>
                  <phase>post-integration-test</phase>
                  <goals>
                    <goal>restore-instrumented-classes</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>
      </plugins>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 2014-05-15
        • 2015-09-07
        • 2017-08-20
        • 2022-11-16
        相关资源
        最近更新 更多