当我查看Assert类JavaDoc中的示例时

assertThat("Help! Integers don't work", 0, is(1)); // fails:
// failure message:
// Help! Integers don't work
// expected: is <1>
// got value: <0>
assertThat("Zero is one", 0, is(not(1))) // passes

比方说assertEquals( 0, 1 ),我没有看到什么大的优势。

如果结构变得更复杂,但是对于消息,这很好,但是您看到更多的优势了吗?可读性?

最佳答案

对于存在与您的意图完全匹配的assertFoo的情况,没有太大的优势。在这些情况下,它们的行为几乎相同。

但是,当您检查比较复杂的支票时,其优势将变得更加明显:

assertTrue(foo.contains("someValue") && foo.contains("anotherValue"));


assertThat(foo, hasItems("someValue", "anotherValue"));

可以讨论其中哪一个更容易阅读,但是一旦断言失败,您将从assertThat收到一条良好的错误消息,但从assertTrue收到很少的信息。
assertThat会告诉您什么是断言以及您得到了什么。 assertTrue只会告诉您您在期望false的位置获得了true

10-08 06:11