2017-06-16 165 views
0

我正在为我的项目编写单元测试,并试图实现至少80%的代码覆盖率。问题是我正在使用lombok的@Data注释来生成getter和setter,当我运行我的单元测试时,所有这些getter和setter以及其他方法(如toString,equals,hashcode等)都会丢失,并且我的代码覆盖率会受到影响。有没有解决这个问题的方法。我一直在寻找很多这方面的知识,但一直未能找到任何有用的帮助。任何帮助,将不胜感激。改进Lombok @数据代码覆盖率

我正在使用Eclemma进行代码覆盖率分析。

+0

作为Nico Van Belle说单元测试类不是为代码覆盖而写的......主目标应该是对单位的验证......稍后如果有些问题存在,这些类应该帮助他们找到它。 @NicoVanBelle lombok不是那么糟..:p :) – Akshay

+0

@NicoVanBelle我明白你的观点。我只是提到我的目标是覆盖大约80%的代码覆盖率,但这不是我编写测试用例的原因。目的是独立测试不同的单元。 –

+0

@VarunSharma我认为这意味着你的班级没有被覆盖。你是否改变MODEL_PACKAGE常量来引用你的包? – Akshay

回答

1

@Data注解是@ToString,@EqualsAndHashCode,@Getter和@Setter的组合。

如果您只需要Lombok自动创建getter和setter,则只能使用@Getter和@Setter注释而不能使用@Data。

1

当需要等号和散列码时,可以使用EqualsVerifier对它们进行单元测试。 EqualsVerifier是一个开源的JUnit库,它为equals和hashCode合约的所有部分生成单元测试,即使手工编写测试也不是直接实现的。

实例:

@Test 
public void equalsContract() { 
    EqualsVerifier.forClass(MyAwesomeLombokedDataClass.class) 
     .suppress(Warning.STRICT_INHERITANCE) 
     .verify(); 
} 
1

0.8.0 release,Jacoco添加用于滤除与@lombok.Generated从他们的报告注释的所有方法的支持。您需要更改的唯一的事情是添加lombok.config到项目的根具有以下设置:

config.stopBubbling = true 
lombok.addLombokGeneratedAnnotation = true 
  • config.stopBubbling = true告诉龙目岛,这是你的根 目录,它不应该搜索的父目录的更多 配置文件(您可以在不同的目录/包中包含多个lombok配置文件 )。
  • lombok.addLombokGeneratedAnnotation = true将为所有龙目岛生成的方法添加@ lombok.Generated 注释。

就是这样。 Jacoco会过滤Lombok自动生成的方法,如果你给出最好的结果,你的代码覆盖率可能接近90%:))