用Java测试builder模式
我们在代码库中广泛使用构建器模式,构建的对象都有一个toBuilder()
方法。我想写一个单元测试,确保在toBuilder()
方法中没有忘记任何字段,也就是说,对于任何可构建的对象,我想做一个大致如下的测试
MyClass obj = getTestObjectWithRandomData();
assertEquals(obj, obj.toBuilder().build());
现在,我可以很容易地编写getTestObjectWithRandomData()
的基本版本,它使用反射为任何对象的字段分配一组值。然而,问题是build()
通常包含大量验证检查,例如,如果某个整数不在正常范围内,这些检查将引发异常。编写符合所有这些特定于类的验证检查的getTestObjectWithRandomData()
的通用版本是不可能的
那么,我怎样才能做我想做的事呢?我试图将构造代码和验证代码分离到不同的方法中,这样测试就不会在验证时出错,但这意味着人们必须记住在创建对象后调用validate()
或其他任何东西。不太好
还有其他想法吗
# 1 楼答案
用龙眼怎么样?这是你的选择吗?它会自动生成构建器代码,你再也不用担心它了。 https://projectlombok.org/features/Builder
只需用
@Builder
注释类与龙目
香草爪哇