Lombok注释与Cobertura或类似工具中的代码覆盖率

时间:2012-04-23 07:43:19

标签: java unit-testing cobertura lombok

Configure cobertura to ignore certain blocks of code

从我从上面的问题中读到的问题,Cobertura没有办法将测试中的代码部分排除在测试之外。

这是真的吗? /在任何类似的工具中都可以吗?

我正在使用 Lombok 注释@Getter@Setter等等,这些都很棒,但会导致覆盖率报告中出现“红色”,即使我正在测试getter和setter方法。 - 我想对此做点什么......有什么方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

是不是可以首先在测试代码上运行delombok,编译它然后按Cobertura进行检测?

披露:我是Project Lombok开发者之一

答案 1 :(得分:3)

Lombok添加了@javax.annotation.Generated注释(1)。但是这个注释有source保留,即你的覆盖工具不能再看到它了: - (

Lombok 1.16.14刚刚通过添加选项来修复issue-1014来生成@lombok.Generated注释;只需配置lombok.addLombokGeneratedAnnotation(2)。

Cobertura可以配置为跳过带有一些注释的方法,因此大多数生成的代码都不会计入您的覆盖范围。

JaCoCo没有提供配置机制来跳过某些注释。 Issue-15尝试修复此问题(以及更多内容)而无需任何配置。

(1)如果未lombok.addGeneratedAnnotation暂停,现已弃用且应替换为lombok.addJavaxGeneratedAnnotation
(2)见lombok config
(3)见this comment

答案 2 :(得分:0)

Lombok创建具有某些方法分支的其他代码。例如,如果您添加@Data而您的对象没有 覆盖等于,您将在equals方法中获得一堆分支,以了解每个成员变量是否为null。 因此,如果您想使用Lombok,则只需接受较低的分支计数或找出一些一致的方法即可 cobertura不计算自动生成的代码。

您可以使用Delombok更好地了解为什么覆盖率较低,但是如果没有覆盖,您将无法提高覆盖率 测试那些自动生成的分支。

早期版本的Lombok(0.12)与Cobertura进行了交互,因此Lombok生成的代码不包括在覆盖范围内。

您可以添加的另一件事是Cobertura中的'ignoreTrivial'标志。这应该照顾自动生成的吸气剂和 设置器,但不包括equals()或hashCode()。

要获取有关equals()和hashCode()的信息,可以使用EqualsVerifier