Var*_*rma 8 java eclipse unit-testing code-coverage eclemma
我正在为我的项目编写单元测试,并尝试实现至少80%的代码覆盖率.问题是,我使用的龙目岛的@Data
注解产生getter和setter,当我跑我的单元测试,所有的getter和setter方法与其他方法,如沿toString
,equals
,hashcode
等错过,我的代码覆盖需要一个打击.有没有解决方法呢?我一直在搜索这个问题,但一直找不到任何有用的东西.任何有关这方面的帮助将不胜感激.
我正在使用Eclemma进行代码覆盖分析.
ahm*_*tin 41
首先,@Data注释是组合 @ToString,@EqualsAndHashCode,@Getter,@Setter。
如果您只需要 Lombok 自动创建 getter 和 setter,则只能使用@Getter和@Setter批注而不是@Data。
此外,为了将 Lombok 创建的方法保留在此范围之外,您可以在根目录中创建一个lombok.config文件并包含以下两行:
config.stopBubbling = true
lombok.addLombokGeneratedAnnotation = true
Run Code Online (Sandbox Code Playgroud)
添加此行后,当您转到Sonar 时,您会看到这些类被100%覆盖。
mla*_*dzo 28
在0.8.0版本中,Jacoco增加了对过滤掉@lombok.Generated
报告中注释的所有方法的支持.您需要更改的唯一内容是lombok.config
使用以下设置添加到项目的根目录:
config.stopBubbling = true
lombok.addLombokGeneratedAnnotation = true
Run Code Online (Sandbox Code Playgroud)
config.stopBubbling = true
告诉Lombok这是你的根目录,它不应搜索父目录以获取更多配置文件(你可以在不同的目录/包中有多个lombok配置文件).lombok.addLombokGeneratedAnnotation = true
将@lombok.Generated注释添加到所有Lombok生成的方法中.就是这样.Jacoco将过滤Lombok自动生成的方法,如果您尽力,您的代码覆盖率可能接近100%:))
当需要 equals 和 hashcode 时,可以使用EqualsVerifier对它们进行非常彻底的单元测试。EqualsVerifier 是一个开源 JUnit 库,它为 equals 和 hashCode 合约的所有部分生成单元测试,即使手动编写测试也无法直接实现。
用法示例:
@Test
public void equalsContract() {
EqualsVerifier.forClass( MyAwesomeLombokedDataClass.class )
.suppress( Warning.STRICT_INHERITANCE )
.verify();
}
Run Code Online (Sandbox Code Playgroud)
小智 5
在根级别创建一个 lombok.config 文件并添加此代码
config.stopBubbling = true
lombok.addLombokGeneratedAnnotation = true
Run Code Online (Sandbox Code Playgroud)
会被代码覆盖率忽略