我有一个 Gradle 项目,其中应用了 JaCoCo 插件。当我运行测试并创建 jacocoTestReport 时,我收到此类不匹配错误
[ant:jacocoReport] Classes in bundle 'e-services' do no match with execution data. For report generation the same class files must be used as at runtime.
[ant:jacocoReport] Execution data for class eservices/model/persistence/Event does not match.
这些类应该匹配,因为我正在本地进行清理 -> 构建 -> 测试。我怀疑不匹配的原因是我使用 jackson.map.ObjectMapper 从 JSON 创建对象,不知何故,这导致 jacoco 的 .exec 文件中存储的 classId 与编译的类 ID 不匹配.
我的测试广泛使用了 Event 类,但由于类不匹配,我的覆盖率仍然为 0%:
import eservices.model.persistence.Event;
event = mapper.readValue(json, Event.class);
event.setTenId(TenIds.getInternalId());
有没有办法覆盖这种情况?
最佳答案
这是 JaCoCo 的已知限制,因为 JaCoCo 依赖于运行时字节码的校验和与其用于生成报告的字节码的校验和相匹配。通常,当您有两个检测字节码的库(例如 PowerMock 和 JaCoCo,或 JPA 和 JaCoCo)时,就会发生这种情况。
以下 JaCoCo 问题 Coverage is missing a class that was in fact tested #193 中引用了这一点它被标记为“不会修复”“已知限制”
关于java - JaCoCo 使用 Jackson.map.ObjectMapper 创建的对象覆盖率为 0%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31616213/