将 isEqualToComparingFieldByFieldRecursively 翻译成我的 Spock 测试

Translate isEqualToComparingFieldByFieldRecursively to my Spock Test

我正在将我所有的 Junit 测试转换为 Spock 测试,我不想使用任何“断言方法”。因此,我必须将方法 isEqualToComparingFieldByFieldRecursively 翻译成我的 Groovy class。我不确定我是否正确理解了该方法的功能。

assertThat(validationMessage).isEqualToComparingFieldByFieldRecursively(provider.createValidationMessageDto());

在这种情况下 validationMessage 是一个 DTO 对象并且 provider.createValidationMessageDto returns 是同一种 DTO -目的。是否已经存在任何类似的方法,或者我是否必须编写一个新的自己的方法来检查 validationMessage?如果是这样,该方法应该做什么?

感谢您的回答。

如果验证消息 DTO 没有提供适当的 equals 方法,那么坚持使用 isEqualToComparingFieldByFieldRecursively 可能是您的最佳解决方案。 虽然 Spock 有很好的隐式断言,但不直接支持诸如反射逐字段比较之类的东西。

您可以使用 Spock 对 Hamcrest 的支持,samePropertyValuesAs 可以编写:

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