對於針對代理運行測試並將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代理 –