从我从上面的问题中读到的内容来看,Cobertura 没有办法将给定的代码部分排除在测试之外,而不是在测试中覆盖。
真的吗?/ 是否有可能在任何类似的工具中?
我正在使用Lombok annotations@Getter
等等@Setter
,它们很棒,但是即使我正在测试 getter 和 setter 方法,它们也会导致覆盖率报告中的“红色”。- 我想做点什么……有什么办法可以解决这个问题吗?
从我从上面的问题中读到的内容来看,Cobertura 没有办法将给定的代码部分排除在测试之外,而不是在测试中覆盖。
真的吗?/ 是否有可能在任何类似的工具中?
我正在使用Lombok annotations@Getter
等等@Setter
,它们很棒,但是即使我正在测试 getter 和 setter 方法,它们也会导致覆盖率报告中的“红色”。- 我想做点什么……有什么办法可以解决这个问题吗?
Lombok 添加了@javax.annotation.Generated
注释 (1)。但是这个注释有source
保留,即你的覆盖工具再也看不到它了:-(
Lombok 1.16.14 刚刚修复了issue-1014,添加了一个选项来生成@lombok.Generated
注释;只需配置lombok.addLombokGeneratedAnnotation
(2)。
Cobertura 可以配置为跳过带有一些注释的方法,因此大多数生成的代码不会计入您的覆盖范围。
JaCoCo 不提供跳过某些注释的配置机制。问题 15试图在不需要任何配置的情况下解决这个问题(以及更多)。
(1) 如果未禁用,lombok.addGeneratedAnnotation
现在已弃用,应替换为lombok.addJavaxGeneratedAnnotation
(2) 请参阅lombok 配置
(3) 请参阅此评论
Lombok 为某些方法创建具有分支的附加代码。例如,如果您添加@Data 并且您的对象没有覆盖equals,那么您将在equals 方法中获得一堆分支来判断每个成员变量是否为空。因此,如果您想使用 Lombok,您只需要接受较低的分支计数或找出一些一致的方法让 cobertura 不计算自动生成的代码。
您可以使用 Delombok 更好地了解覆盖率较低的原因,但如果不测试自动生成的那些分支,您将无法提高它。
Lombok 的早期版本 (0.12) 与 cobertura 交互的方式是,lombok 生成的代码不计入覆盖范围。
您可以添加的另一件事是 Cobertura 中的“ignoreTrivial”标志。这应该处理自动生成的 getter 和 setter,但不包括 equals() 或 hashCode() 之类的东西。
要获得 equals() 和 hashCode() 的覆盖范围,您可以使用EqualsVerifier。