我有一个用 @UtilityClass 这样地
@UtilityClass
@UtilityClass public class myUtilClass { ... }
jacoco没有完全覆盖这个类,因为注解创建了自动生成的代码 @UtilityClass . 理想情况下,我不想更改任何配置文件来忽略自动生成代码。如何测试此代码?
cwxwcias1#
由生成的唯一“可覆盖”代码 @UtilityClass 在构造函数中:
private MyUtilClass() { throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); }
因为这是一个 private 永远不应该调用的构造函数,您不能定期测试它。如果您真的想调用它,可以使用一些丑陋的反射代码:
private
Constructor<MyUtilClass> constructor; constructor = MyUtilClass.class.getDeclaredConstructor(); constructor.setAccessible(true); constructor.newInstance();
但你不应该仅仅为了报道而这样做。拥有高覆盖率通常是一个好主意,但如果你不得不牺牲好的测试标准,那就不行了。我建议您建议jacoo忽略lombok的代码,将这一行添加到 lombok.config 文件:
lombok.config
lombok.addLombokGeneratedAnnotation = true
你不必为整个项目配置这个。如果你只把这个文件放到 MyUtilClass ,jacoco将只忽略此包中生成的代码。
MyUtilClass
1条答案
按热度按时间cwxwcias1#
由生成的唯一“可覆盖”代码
@UtilityClass
在构造函数中:因为这是一个
private
永远不应该调用的构造函数,您不能定期测试它。如果您真的想调用它,可以使用一些丑陋的反射代码:
但你不应该仅仅为了报道而这样做。拥有高覆盖率通常是一个好主意,但如果你不得不牺牲好的测试标准,那就不行了。
我建议您建议jacoo忽略lombok的代码,将这一行添加到
lombok.config
文件:你不必为整个项目配置这个。如果你只把这个文件放到
MyUtilClass
,jacoco将只忽略此包中生成的代码。