従来の assertXXX() メソッドの代わりに、Hamcrest マッチャーと assertThat() を使用する必要があるのはなぜですか? 質問する

従来の assertXXX() メソッドの代わりに、Hamcrest マッチャーと assertThat() を使用する必要があるのはなぜですか? 質問する

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 )

構造がより複雑になると、メッセージにとっては良いことかもしれませんが、もっと利点があると思いますか? 読みやすさでしょうか?

ベストアンサー1

assertFoo意図と完全に一致する が存在する場合、大きな利点はありません。その場合、それらはほぼ同じように動作します。

しかし、もう少し複雑なチェックになると、その利点がより顕著になります。

val foo = List.of("someValue");
assertTrue(foo.contains("someValue") && foo.contains("anotherValue"));
Expected: is <true>
         but: was <false>

val foo = List.of("someValue");
assertThat(foo, containsInAnyOrder("someValue", "anotherValue"));
Expected: iterable with items ["someValue", "anotherValue"] in any order
     but: no item matches: "anotherValue" in ["someValue"]

どちらが読みやすいかは議論の余地がありますが、アサートが失敗すると、 からは適切なエラー メッセージが表示されますassertThatが、 からはごくわずかな情報しか得られませんassertTrue

おすすめ記事