我正在将所有Junit测试转换为Spock测试,我不想使用任何";断言方法";。因此,我必须将方法isEqualToComparingFieldByFieldRecursive转换为Groovy类。我不确定我是否正确理解了这个方法的作用。
assertThat(validationMessage).isEqualToComparingFieldByFieldRecursively(provider.createValidationMessageDto());
在这种情况下,validationMessage是一个DTO对象,提供程序.createValidationMessageDto返回相同类型的DTO对象。是否已经存在任何类似的方法,或者我是否必须编写一个新的自己的方法,检查validationMessage?如果是,该方法应该怎么做?
谢谢你的回答。😊
如果验证消息DTO没有提供正确的equals方法,那么坚持使用isEqualToComparingFieldByFieldRecursively
可能是最好的解决方案。虽然斯波克有很好的隐含断言,但像反思性的逐场比较这样的东西并没有得到直接支持。
您可以使用Spock对Hamcrest的支持,并使用相同的PropertyValuesAs来编写:
import static org.hamcrest.beans.SamePropertyValuesAs.samePropertyValuesAs
import static spock.util.matcher.HamcrestSupport.that
// ...
expect:
that validationMessage, samePropertyValuesAs(provider.createValidationMessageDto()
然而,这并不能进行递归比较,因此您可以使用https://github.com/shazam/shazamcrest