簡體   English   中英

jacoco代理程序是否報告另一個代理程序的主代碼的代碼覆蓋率

[英]Does jacoco agent report code coverage for another agent's premain

對於針對代理運行測試的場景,並且Jacoco代理已針對該目標代理進行檢測。 jacoco是否會報告目標代理的premain方法的代碼覆蓋率?

Javaagent按照在命令行上指定的順序應用。 如果首先指定了JaCoCo代理,則其檢測將應用於之后的所有代理。

因此,如果要包括Java代理更改或添加的任何代碼的覆蓋范圍,則應將它們放在JaCoCo之后。

JaCoCo代理會檢測並記錄其后加載的類的執行。 Java代理按在命令行上指定的順序加載。 因此,如果在JaCoCo代理之后指定了第二個代理,則JaCoCo將對其進行檢測並記錄其執行。 這是示例:

代理src/main/java/Premain.java

import java.lang.instrument.Instrumentation;

public class Premain {
  public static void premain(String args, Instrumentation inst) {
    System.out.println("Hello world");
  }
}

一個空的測試src/test/java/Test.java只是為了能夠與其一起執行代理,而不能直接執行代理的代碼:

import org.junit.Test

public class Test {
  @Test
  public void test() {
  }
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>example</artifactId>
  <version>0.1-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
  </dependencies>

  <properties>
    <argLine>-javaagent:target/${project.build.finalName}.jar</argLine>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.0.2</version>
        <configuration>
          <archive>
            <manifestEntries>
              <Premain-Class>Premain</Premain-Class>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.7.9</version>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19.1</version>
        <executions>
          <execution>
            <!-- to be able to use agent that was built -->
            <id>default-test</id>
            <phase>verify</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>

執行mvn clean jacoco:prepare-agent verify jacoco:report將在目錄target/site/jacoco生成報告:

報告

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM