我正在使用Jacoco使用ANT查找单元测试的代码覆盖率,但报告没有生成,我得到了这个错误序列:
[jacoco:report] Loading execution data file C:\JUnit\apache-ant-1.10.1\jacoco.ex
ec
[jacoco:report] Writing bundle 'Test' with 566 classes
[jacoco:report] Classes in bundle 'Test' do no match with execution data. For report generation the same class files must be used as at runtime.
[jacoco:report] Execution data for class com/!!/AccountDetails does not match.
[jacoco:report] Execution data for class com/!!/DataExtractorHelper does not match.
[jacoco:report] Execution data for class com/!!/WelcomeLetter does not match.
[jacoco:report] Execution data for class com/!!/WelcomeLetterABCD does not match.
我已经阅读了这些答案,但似乎没有一个可以帮助我解决问题。
Jacoco代码覆盖报告生成器显示错误:“捆绑包‘代码覆盖报告’中的类与执行数据不匹配”
jacoco:对于报告生成,必须使用与运行时相同的类文件
我在Eclipse上编译了所有类,并使用ANT构建工具对这些类执行代码覆盖。由于一些依赖关系,我确实使用了一些外部JAR,它们已经在jdk 1.8.0_101上编译,并且我正在使用jdk 1.8.0 _111(我尝试通过使用JDK1.8.1_101来解决这个错误,但是我得到了相同的错误)
有人提到在Eclipse与Oracle JDK编译中类ID可能会发生变化。因此,我还通过在Eclipse上编译一些基本类来检查这种情况,并使用jdk ANT来查找代码覆盖率。它在这种情况下有效。代码覆盖任务中没有进行编译。只需要检查. class文件的覆盖率。
在测试代码覆盖率之前,错误中提到的所有类都已在eclipse上编译。
我尝试过使用离线检测工具作为正在使用的持久性框架的解决方法,但它仍然给我带来了这些错误。上面提到的错误中的所有类都存在于仪器类文件夹中。${dest.dir}
这是我目前的build.xml。
<target name="instrument">
<delete dir="${dest.dir}"/>
<mkdir dir="${dest.dir}"/>
<jacoco:instrument destdir="${dest.dir}">
<fileset file="D:/NEON/HW/!!/module/!!/bin" includes="**/*.class"/>
<fileset file="D:/NEON/HW/!!/testprojects/!!/bin" includes="**/*.class"/>
</jacoco:instrument>
</target>
<target name="cov-test" depends="instrument">
<mkdir dir="${report.dir}"/>
<jacoco:coverage>
<junit fork="true" forkmode="once" showoutput="true" printsummary="on" enabletestlistenerevents="true">
<classpath>
<path refid="ALL.jars"/>
<path refid="classpath"/>
<pathelement location="C:/JUnit/jacoco-0.7.9/lib/jacocoagent.jar"/>
<pathelement location="C:/JUnit/JARS/!!/config/"/>
<pathelement path="C:/JUnit/apache-ant-1.10.1/InstrClasses"/>
</classpath>
<sysproperty key="jacoco-agent.destfile" file="jacoco.exec"/>
<test name="Fully qualified classname"/>
<formatter type="plain"/>
<formatter type="plain" usefile="false" />
<batchtest fork="yes" todir="${report.dir}">
<fileset dir="${src.dir}" includes="Fully qualified classname.java"/>
</batchtest>
</junit>
</jacoco:coverage>
</target>
<target name="cov-report" depends="cov-test">
<jacoco:report>
<executiondata>
<file file="jacoco.exec" />
</executiondata>
<structure name="Test">
<classfiles>
<fileset dir="D:/NEON/HW/!!/module/!!/bin"/>
<fileset dir="D:/NEON/HW/!!/testprojects/!!/bin"/>
</classfiles>
<sourcefiles>
<fileset dir="D:/NEON/HW/!!/module/!!/src"/>
<fileset dir="D:/NEON/HW/!!/testprojects/!!/src"/>
</sourcefiles>
</structure>
<csv destfile="${report.dir}/report.csv" />
</jacoco:report>
</target>
问题:基于jdk 1.8的编译器生成的字节码1.Will有什么区别。0_101和jdk 1.8。0_111?增量更新可以改变字节码吗?还是只有在主要版本更新期间差异才显著?
2.为什么即使已实施离线检测,我仍会收到此错误?我是否遗漏了代码中的任何声明?我试图保持代码的格式与这里的jacoco文档中提供的示例的格式相似。
2.为什么即使已实施离线检测,我仍会收到此错误?我是否遗漏了代码中的任何声明?我试图保持代码的格式与这里的jacoco文档中提供的示例的格式相似。
当被测类被添加到其测试类中的 PrepareForTest 注释时,我注意到了这一点。
例如,在以下情况下,Foo.java将具有0覆盖率,错误执行类Foo的执行数据不匹配
。
@PrepareForTest({ Foo.class })
public class FooTest {
@Test
public void test1() {
Foo f = new Foo();
String result = f.doSomething();
assertEquals(expectedResult, result);
}
}
基于jdk 1.8.0_101和jdk 1.8.0_111的编译器生成的字节码会有区别吗?增量更新能改变字节码吗?还是只有在主要版本更新时差异才显著?
是的——一般来说,任何不同版本的编译器(没有例外)都可以生成不同的字节码。
为什么即使实现了离线检测,我仍然会收到这个错误?我是否错过了代码中的任何声明?
消息本身在你提到的SO问题中已经得到了完美的解释:jacoco代码覆盖报告生成器显示错误:“bundle 'Code Coverage Report '中的类与执行数据不匹配”
更精确的答案需要最小、完整和可验证的示例(https://stackoverflow.com/help/mcve)由您提供,不幸的是,我认为这只是构建的摘录。带有一些注释的xml
是不完整和可验证的示例。不清楚Eclipse在这里除了JDK之外还扮演着什么角色。顺便说一下,Eclipse拥有并使用自己的Eclipse Java编译器。
我还注意到,当两者包含相同的类路径时,被检测的类的数量(614)不同于被添加到测试包的类的数量(566)。那会有什么后果吗?
是的——结果是检测的内容与为生成报告而分析的内容不同。这也与有关不匹配的消息相关。
问题内容: 我们有一个Maven多模块项目,其中包含一个父级(HelloWorld)和不同的子级(HelloWorldServices和HelloWorldPresentation),并使用Jenkins进行构建。 运行成功的测试后的错误是 前面的线说 这是我定义父pom JaCoCo插件的方式: 我没有明确提到过surefire。我还尝试了到处都可以找到的将argLine放入配置中的结果,但是所
我正在用JUnit5测试一个应用程序,并使用Jacoco进行报道。测试执行正常,并有测试报告。 但是,如果服务包含方法,则Jacoco report会有以下日志,并用@Transactional注释 所有@Service class方法都会发生此错误,并用@Transactional注释,普通类coverage is calculated ok。 下面是一个样本测试: 很好。覆盖率为非零: 0%覆
我正在使用Jacoco:报告标签生成Jacoco报告。我收到了以下错误: ant报告目标如下所示: 是使用<code>生成的/仅代码/src。那么为什么会出现这样的错误呢。知道吗?
我们有一个Maven多模块项目,由父级(HelloWorld)和不同的子级(HelloWorldServices和HelloWorldPresentation)组成,并使用Jenkins进行构建。 运行成功测试后的错误是
我得到了 我错过了什么?
我正在使用一个大的应用程序来测试。为了运行测试,我将可测试的war文件(test.war)添加到现有的应用程序中。ear并远程部署在WildFly 10服务器上。 我的需求的下一部分是在测试运行后获得代码覆盖率报告。为此,我使用了Jacoco,并使用Jacoco Maven插件运行它。 应用程序。ear得到部署,即使测试运行正常,但在生成报告时,Jacoco失败,出现异常“IllegalState