当我查看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
。