gpt4 book ai didi

java - 类(class)的执行数据不匹配+ Jacoco

转载 作者:行者123 更新时间:2023-12-01 12:43:24 25 4
gpt4 key购买 nike

我正在使用 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 code coverage report generator showing error : "Classes in bundle 'Code Coverage Report' do no match with execution data"

jacoco: For report generation the same class files must be used as at runtime

我在 Eclipse 上编译了所有类,并使用 ANT 构建工具对这些类执行代码覆盖。由于某些依赖性,我确实使用了一些外部 jar,并且它们已在 jdk 1.8.0_101 上编译,并且我使用的是 jdk 1.8.0_111(我尝试使用 jdk 1.8.0_101 解决此错误,但我遇到了相同的错误)

已经提到类 ID 可能会在 Eclipse 与 Oracle JDK 编译中发生变化。因此我也通过在Eclipse上编译一些基本类来检查这个案例,并使用jdk + ANT查找代码覆盖率。在这种情况下它起作用了。在代码覆盖任务中没有进行编译。 .class文件只需要检查其覆盖范围即可。

在测试代​​码覆盖率之前,错误中提到的所有类都已在 eclipse 上编译。

我已经 尝试使用离线检测 工具作为正在使用的持久性框架的解决方法,但它仍然给我这些错误。
错误中上面提到的所有类都存在于Instrumented classes文件夹中。 ${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>

问题:
1.基于jdk 1.8.0_101和jdk 1.8.0_111的编译器生成的字节码会有区别吗?增量更新可以改变字节码吗?还是仅在主要版本更新期间差异才显着?

2.为什么在实现离线检测后我仍然收到这个错误?我会错过代码中的任何声明吗?我试图保持代码的格式与 jacoco 文档 here 中提供的示例的格式相似。
  • 我还注意到,当两者都包含相同的类路径时,被检测的类的数量(614)与添加到测试包的类的数量(566)不同。那会有什么后果吗?
  • 最佳答案

    Will there be any difference in the bytecode generated by compilers based on jdk 1.8.0_101 and jdk 1.8.0_111? Can incremental updates change bytecode? Or is the difference only significant during major version updates?



    是的 - 通常任何不同版本(无一异常(exception))的编译器都可以生成不同位的字节码。

    Why am I still getting this error even after offline instrumentation has been implemented? Am I missing out on any declaration in the code?



    消息本身已经在您提到的 SO 问题中得到了完美的解释: jacoco code coverage report generator showing error : "Classes in bundle 'Code Coverage Report' do no match with execution data"

    更精确的答案需要您提供 Minimal、 完整 可验证 示例( https://stackoverflow.com/help/mcve ),不幸的是,在我看来,只是 build.xml 的摘录和一些注释不是 完整的 和 Verifying 示例。并且不清楚 Eclipse 除了 JDK 之外还扮演什么角色。顺便说一下,Eclipse 拥有并使用它自己的 Eclipse Java 编译器。

    I've also noticed that the number of classes being instrumented(614) differs from the number of classes being added to the Test bundle (566) when both contain the same classpaths. Could that be of any consequence?



    是的 - 结果是所检测的内容与为生成报告而分析的内容不同。这也与有关不匹配的消息相关。

    关于java - 类(class)的执行数据不匹配+ Jacoco,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44776226/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com