java - 在测试中断言 java.util.Date 字段

标签 java testing assertj

我正在为我的 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/

相关文章:

android - 与选定的用户一起测试 Android 应用

java - 使用assertj时是否可以记录被断言的字段的名称和值以及条件?

java - 使用 AssertJ 验证列表项是否具有相同的值,但不是相同的实例

java - 使用流进行迭代时,ForeignCollection 会抛出 SQLException

java - 您可以在 Protractor 规范中运行 Java 代码吗?

testing - 在 deftest 中使用 cider 调试

ruby-on-rails - 使用 RSpec 进行 Rails 片段缓存测试

java - AssertJ 断言 List<Long> 仅包含 long[]

java - 当文档以小写 &lt;!doctype 开头时, Karate HTML 解析抛出 SaxException

java - 警报对话框之后的警报对话框