对于针对代理运行测试并将Jacoco代理安装到此目标代理的场景。 jacoco会报告目标代理的预充方法的代码覆盖率吗?jacoco代理是否报告另一个代理预定义的代码覆盖范围
回答
Javaagents按照它们在命令行中指定的顺序进行应用。如果首先指定了JaCoCo代理,则它的检测适用于所有后续代理。
因此,如果您想要涵盖Java代理更改或添加的任何代码的覆盖范围,则应该在JaCoCo之后放置这些代码。
感谢这个答案,我明白如果我想让代码覆盖另一个代理,我需要首先在命令行中指定jacoco代理。但我的问题是,问第二个代理的'premain'方法是否由代码覆盖率的jacoco代理报告?我在本地尝试了一个实验,我发现jacoco的报告不包括第二个代理的代码覆盖范围。因此,试着弄清楚jacoco代理是否会报告这个部分? –
@ Y.Feng是的,它会 - 我已经添加了答案,包含示例:http://stackoverflow.com/a/42480303/244993 – Godin
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
生产报告:
感谢您的详细的答案和简短的演示!很有帮助! –
- 1. Laravel代码覆盖范围
- 2. Maven代码覆盖范围
- 3. BullsEye代码覆盖范围
- 4. Jacoco-IntegrationTests代码覆盖
- 5. 代码覆盖使用JaCoCo
- 6. PowerMockito与Jacoco代码覆盖
- 7. Jacoco代码覆盖率
- 8. 使用JaCoCo的Sonar IT给予0%的代码覆盖范围
- 9. 使用jacoco进行REST调用的代码覆盖范围
- 10. Jacoco代码覆盖率报告显示詹金斯
- 11. 什么是Java中的代理范围和代理代码?
- 12. 代码覆盖范围和节点覆盖范围
- 13. 是否有获得Apex代码的代码覆盖率报告的好方法?
- 14. 叮当中的代码覆盖范围
- 15. COM API的C#代码覆盖范围
- 16. 使用PHPUnit的代码覆盖范围
- 17. codecov.io中的代码覆盖范围
- 18. Hudson中的Java代码覆盖范围
- 19. Android上的代码覆盖范围
- 20. Jacoco覆盖的单元测试代码
- 21. 艾玛代码覆盖率报告
- 22. pydev代码覆盖率报告为零
- 23. maven emma代码覆盖率报告
- 24. PHPUnit代码覆盖率报告0/0
- 25. Postgres sql查询代码覆盖范围
- 26. VS 2012代码覆盖范围
- 27. PHPUnit白名单代码覆盖范围
- 28. TeamCity C++代码覆盖范围
- 29. 代码覆盖范围为C
- 30. simplecov宝石代码覆盖范围
不清楚是什么的问题。 – RamPrakash
@RamPrakash每个javaagent都有一个'premain'方法,JVM加载代理。我问,如果我提供两个代理商,第一个是Jacoco,第二个是代理商。第二个代理的'premain'方法是否考虑到了代码覆盖率,由jacoco代理 –