类的执行数据不匹配 + Jacoco
我正在使用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 代码覆盖率报告生成器显示错误:“捆绑'代码覆盖率报告'中的类与执行数据不匹配”
我在 Eclipse 上编译了所有类,并使用 ANT 构建工具对这些类执行代码覆盖。由于某些依赖关系,我确实使用了一些外部jar,并且它们已在jdk 1.8.0_101上编译,并且我使用的是jdk 1.8.0_111(我尝试使用jdk 1.8.0_101来解决此错误,但我得到了相同的错误)
已经提到,在Eclipse vs Oracle JDK编译中,类ID可能会发生变化。因此,我也通过在Eclipse上编译一些基本类来检查这种情况,并使用jdk + ANT来查找代码覆盖率。在这种情况下,它有效。代码覆盖率任务中没有进行任何编译。.class文件只需要检查覆盖范围即可。
错误中提到的所有类在测试代码覆盖率之前都已在 eclipse 上编译。
我尝试过使用脱机检测工具作为正在使用的持久性框架的解决方法,但它仍然给我这些错误。错误中提到的上述所有类都存在于“已检测的类”文件夹中。${dest.dir}
这是我的构建.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>
问题:1.基于jdk 1.8.0_101和jdk 1.8.0_111的编译器生成的字节码会有什么区别吗?增量更新可以更改字节码吗?还是仅在主要版本更新期间差异显著?
2.为什么即使在实施脱机检测后,我仍然收到此错误?我是否遗漏了代码中的任何声明?我试图保持代码的格式与此处的jacoco文档中提供的示例的格式相似。
- 我还注意到,当两者包含相同的类路径时,被检测的类(614)的数量与添加到测试包(566)的类的数量不同。这会有什么后果吗?