java - JaCoCo 使用 Jackson.map.ObjectMapper 创建的对象覆盖率为 0%

标签 java jackson jacoco

我有一个 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/

相关文章:

java - 在 NetBeans 中自动折叠或折叠 getter 和 setter 或使用紧凑格式?

java - 将字符串格式化为日期对象时遇到问题

java - 原始数组与 ArrayList

java - 如何(完全)将 json 反序列化为通用列表?

Java Spring JSON解析错误: Cannot deserialize instance out of START_ARRAY token

java - <goal>instrument</goal> 中的 JaCoCo(离线检测)分析整个 pom.xml。但我只需要测试部分

java - 为什么 jacoco :cover report 0 tests, 0 次失败,0 次错误用于 Play 2.2 中的测试?

java - 转换 ActiveRecord :Relation to java array

rest - InvalidDefinitionException : Cannot construct instance of `com.vehicle.datatransferobject.VehicleDTO`

java - Jacoco - 忽略 MyClass.1