java为什么我应该使用HamcrestMatcher和assertThat()而不是传统的assertXXX()方法
当我看到断言类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 )
有什么大的优势
如果构造变得更复杂,那么消息可能会更好,但是你看到了更多的优势吗?可读性
# 1 楼答案
基本上是为了提高代码的可读性
除了hamcrest,您还可以使用fest assertions。 与hamcrest相比,他们有一些优势,例如:
(
assertEquals(123, actual); // reads "assert equals 123 is actual"
vsassertThat(actual).isEqualTo(123); // reads "assert that actual is equal to 123")
一些例子
2016年10月17日更新
Fest不再处于活动状态,请改用AssertJ
# 2 楼答案
对于那些存在完全符合您意图的
assertFoo
的情况,没有什么大的优势。在这些情况下,它们的行为几乎相同但当你面对更复杂的检查时,优势就变得更加明显:
与
我们可以讨论其中哪一个更容易阅读,但一旦断言失败,您将从
assertThat
得到一条很好的错误消息,但从assertTrue
得到的信息量非常少