我正在为我的 DAO 服务编写集成测试。我通过使用 dao 插入方法执行此操作,然后从数据库中读取对象并使用原始对象断言所有字段。
我想用assertj-core做断言。特别是isEqualToComparingFieldByField .
但是 java.util.Date 字段有问题。它们返回相同的 getTime() 值但不相等。
目前我忽略了 isEqualToComparingFieldByField 断言中的这些字段,然后使用 hasSameTimeAs 方法进行比较。
assertThat(object).isEqualToIgnoringGivenFields(other, "time");
assertThat(object.getTime()).hasSameTimeAs(other.getTime());
是否有任何方法可以为给定类型(在本例中为 java.util.Date)的 isEqualToComparingFieldByField 方法提供自定义比较器或任何其他解决方案来逐字段断言两个对象来避免此问题?
最佳答案
无法在“逐字段”比较中为给定字段类型指定自定义比较器——我不确定在 AssertJ 中引入它是否优雅(但我希望被证明是错误的) .
你可以做的是为你的对象定义一个比较器,然后像这样使用它:
assertThat(frodo).usingComparator(raceNameComparator).isEqualTo(pippin);
参见 assertj-examples一个完整的工作示例的项目。
我知道编写比较器需要付出努力,这是要完全控制所使用的比较策略所要付出的代价。
关于java - 在测试中断言 java.util.Date 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33526992/