0

我正在使用 evosuite 1.0.3 版本。我能够成功生成测试类,并且 project_info.xml 显示 0.75 作为代码覆盖率,不过是 75% (0.75*100)。

但是当我与 Jacoco 代码覆盖率工具集成时,我并没有看到 75% 的覆盖率。它仅显示为 13%。这可能是什么原因?

下面是我发出 mvn evosuite:info 时的输出。

[INFO] 项目总班级数:12

[INFO] 项目中可测试的类数:12

[INFO] 生成的测试套件数量:10

[INFO] 总体覆盖率:0.7541666666666665

我不应该看到 jacoco 报告中的覆盖率也像整体覆盖率一样 75% 吗?请帮忙。

4

1 回答 1

0

如果没有最小、完整和可验证的示例,很难说出确切的原因并建议一些精确的方法来解决您的问题,但是请引用EvoSuite 文档中关于代码覆盖率的内容

... 必须对被测类 (CUT) 进行检测,即需要修改其字节码。

不幸的是,这些字节码修改可能与用于测量代码覆盖率的工具(例如,JaCoCo、EclEmma、Cobertura、Clover 和 JMockit)完成的字节码检测相冲突。所以很可能最终你得到 0% 的代码覆盖率......

同时,如果您获得 0% 的覆盖率,您可以尝试...

JaCoCo 中还有两种模式——默认推荐的使用 Java 代理的所谓“on-the-fly”检测,以及没有代理的所谓“离线”检测。在没有示例不清楚在您的情况下如何启动 JaCoCo 的情况下,但是除了 EvoSuite 文档页面上的解决方法之外,JaCoCo“离线”仪器可能会有所帮助 - 引用JaCoCo 关于离线仪器的文档

JaCoCo 的主要优点之一是 Java 代理,它可以即时检测类。这大大简化了代码覆盖率分析,因为不需要预先插桩和类路径调整。但是,在某些情况下,即时检测不适合,例如:

  • ...
  • 与执行动态类文件转换的其他代理冲突。

对于此类场景,可以使用 JaCoCo 预先检测类文件...

于 2017-01-14T11:32:56.377 回答