jacoco代理是否报告另一个代理的premain的代码覆盖率

时间:2017-02-24 19:24:34

标签: java jacoco instrumentation agent

对于针对代理运行测试的方案,并且Jacoco代理已检测到此目标代理。 jacoco会报告目标代理的premain方法的代码覆盖率吗?

2 个答案:

答案 0 :(得分:1)

Javaagents按照在命令行中指定的顺序应用。如果首先指定了JaCoCo代理,则其检测将应用于之后的所有代理。

因此,如果要包含Java代理更改或添加的任何代码的覆盖范围,则应将这些代码放在JaCoCo之后。

答案 1 :(得分:1)

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中生成报告:

report