Я использую JUnit для проверки своего кода и доступа к закрытым методам / полям. Я использую отражение, которое не очень хорошо работает с инструментами JaCoCo на лету; Поэтому я начал заниматься автономной аппаратурой.
Я использую следующую команду для выполнения автономного инструментирования:
java.exe \
-jar C:\jacoco\jacococli.jar \
instrument \
C:\project\main\main.jar \
--dest C:\project\coverage
После этого я получаю инструментальный JAR здесь:
- C: \ Проект \ охват \ main.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
Почему, когда я пытаюсь сгенерировать отчет, я получаю сообщения об ошибках о классе, который уже используется?