13

配置 cobertura 以忽略某些代码块

从我从上面的问题中读到的内容来看,Cobertura 没有办法将给定的代码部分排除在测试之外,而不是在测试中覆盖。

真的吗?/ 是否有可能在任何类似的工具中?

我正在使用Lombok annotations@Getter等等@Setter,它们很棒,但是即使我正在测试 getter 和 setter 方法,它们也会导致覆盖率报告中的“红色”。- 我想做点什么……有什么办法可以解决这个问题吗?

4

3 回答 3

4

是不是可以先在被测代码上运行delombok,编译它,然后由Cobertura检测它?

披露:我是龙目岛项目的开发人员之一

于 2012-04-23T17:37:07.663 回答
4

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) 请参阅此评论

于 2017-03-29T10:52:41.460 回答
0

Lombok 为某些方法创建具有分支的附加代码。例如,如果您添加@Data 并且您的对象没有覆盖equals,那么您将在equals 方法中获得一堆分支来判断每个成员变量是否为空。因此,如果您想使用 Lombok,您只需要接受较低的分支计数或找出一些一致的方法让 cobertura 不计算自动生成的代码。

您可以使用 Delombok 更好地了解覆盖率较低的原因,但如果不测试自动生成的那些分支,您将无法提高它。

Lombok 的早期版本 (0.12) 与 cobertura 交互的方式是,lombok 生成的代码不计入覆盖范围。

您可以添加的另一件事是 Cobertura 中的“ignoreTrivial”标志。这应该处理自动生成的 getter 和 setter,但不包括 equals() 或 hashCode() 之类的东西。

要获得 equals() 和 hashCode() 的覆盖范围,您可以使用EqualsVerifier

于 2020-05-03T17:02:19.810 回答