我正在使用JUnit来测试我的代码并访问私有方法/字段,我使用反射,这在JaCoCo即时检测工具中不能很好地发挥作用;因此,我开始进行离线检测。
我使用以下命令执行离线检测:
java.exe \
-jar C:\jacoco\jacococli.jar \
instrument \
C:\project\main\main.jar \
--dest C:\project\coverage
此后,我在这里结束了已检测的JAR:
然后我在提供的类路径上运行JUnit测试:
C:\jacoco\jacocoagent.jar;C:\project\coverage\main.jar;...
当我得到我期望的jacoco.exec文件时,这似乎很好用。
当我尝试使用以下方式为此jacoco.exec文件生成报告时:
java.exe \
-jar C:\jacoco\jacococli.jar \
report \
C:\project\coverage\jacoco.exec \
--classfiles C:\project\coverage\main.jar \
--html C:\project\coverage\report
然后我收到此错误消息:
Exception in thread "main" java.io.IOException: Error while analyzing C:\project\coverage\main.jar@my/package/MyClass.class.
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzerError(Analyzer.java:166)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeClass(Analyzer.java:138)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeClass(Analyzer.java:161)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeAll(Analyzer.java:197)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeZip(Analyzer.java:269)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeAll(Analyzer.java:200)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeAll(Analyzer.java:230)
at org.jacoco.cli.internal.commands.ClassInfo.execute(ClassInfo.java:58)
at org.jacoco.cli.internal.Main.execute(Main.java:89)
at org.jacoco.cli.internal.Main.main(Main.java:104)
Caused by: java.lang.IllegalStateException: Class my/package/MyClass is already instrumented.
at org.jacoco.cli.internal.core.internal.instr.InstrSupport.assertNotInstrumented(InstrSupport.java:176)
at org.jacoco.cli.internal.core.internal.analysis.ClassAnalyzer.visitField(ClassAnalyzer.java:85)
at org.jacoco.cli.internal.asm.ClassVisitor.visitField(ClassVisitor.java:294)
at org.jacoco.cli.internal.asm.ClassReader.readField(ClassReader.java:883)
at org.jacoco.cli.internal.asm.ClassReader.accept(ClassReader.java:694)
at org.jacoco.cli.internal.asm.ClassReader.accept(ClassReader.java:500)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeClass(Analyzer.java:120)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeClass(Analyzer.java:136)
... 8 more
为什么当我尝试生成报告时,是否收到有关已检测到的类的错误消息?
答案 0 :(得分:0)
啊哈!我只是发现我应该使用非仪表型JAR来生成报告,即
java.exe \
-jar C:\jacoco\jacococli.jar \
report \
C:\project\coverage\jacoco.exec \
--classfiles C:\project\main\main.jar \
--html C:\project\coverage\report
注意:main \ main.jar而不是coverage \ main.jar
我通过尝试运行发现了这一点:
java.exe \
-jar C:\jacoco\jacococli.jar \
classinfo \
C:\project\coverage\main.jar
哪个会产生相同的错误:
Caused by: java.lang.IllegalStateException: Class my/package/MyClass is already instrumented.
我在此处发布了该错误,希望改善消息传递: https://github.com/jacoco/jacoco/issues/700