Configure cobertura to ignore certain blocks of code
从我从上面的问题中读到的问题,Cobertura没有办法将测试中的代码部分排除在测试之外。
这是真的吗? /在任何类似的工具中都可以吗?
我正在使用 Lombok 注释@Getter
,@Setter
等等,这些都很棒,但会导致覆盖率报告中出现“红色”,即使我正在测试getter和setter方法。 - 我想对此做点什么......有什么方法可以解决这个问题吗?
答案 0 :(得分:4)
答案 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。