Нет большого преимущества для тех случаев, когда существует assertFoo
, который точно соответствует вашим намерениям. В этих случаях они ведут себя почти одинаково.
Но когда вы приходите к более сложным проверкам, преимущество становится более заметным:
assertTrue(foo.contains("someValue") && foo.contains("anotherValue"));
против
assertThat(foo, hasItems("someValue", "anotherValue"));
Можно обсудить, какой из них легче читать, но как только произойдет сбой утверждения, вы получите хорошее сообщение об ошибке от assertThat
, но только очень небольшое количество информации от assertTrue
.
assertThat
расскажет вам, что было утверждение и что вы получили вместо этого. assertTrue
только скажет вам, что вы получили false
, где вы ожидали true
.