强制 AssertJ 按身份进行比较的惯用方法?

Idiomatic way to force AssertJ to compare by identity?

提问人:sh-at-cs 提问时间:7/8/2023 更新时间:7/10/2023 访问量:85

问:

默认情况下,AssertJ 的方法比较使用。这通常是正确的选择,但有时您确实希望通过精确的对象标识/引用标识进行比较(Java 中的“双等号”,Kotlin 中的“三等号”)。assertThat(...).isEqualTo().equals()=====

有没有一种惯用的方法来强制 AssertJ 进行这种比较,例如我不知道的断言方法?

我能做的最好的事情就是通过在没有 AssertJ 的情况下进行比较来解决它,然后仅使用它来检查生成的布尔值:

科特林:

assertThat(obj1 === obj2).isTrue()

爪哇岛:

assertThat(obj1 == obj2).isTrue();

正如我已经暗示的那样,这并不理想,因为 a) 与其他断言相比,它看起来不一致,b) 断言失败时产生的错误消息只是说“预期为真,为假”,这不如显示有问题的不同对象(即使它们只是它们的内存位置不同,而不是它们的内容)。

java kotlin 测试 相等性 断言j

评论


答:

5赞 Ken Chan 7/8/2023 #1

引用比较的 AssertJ 惯用方法是通过 isSameAs 和 isNotSameAs

assertThat(obj1).isSameAs(obj2);
assertThat(obj1).isNotSameAs(obj2);