xUnit のような基本的なアサーションが提供するものを超えて、他のアサーションが提供できるものを理解できませんAssert.True
。単体テストで他のタイプのアサーションを使用する利点は何ですか?
4 に答える
JUnit では、すべてのマッチングに Hamcrest (assertThat) を使用することを好みます。より読みやすいアサーションが得られると思います。利用可能なマッチャーは多数あり、エラー メッセージはより多くの情報を提供します。
たとえば、List<String>
. そのassertTrue
中には次のようなものがあります:
assertTrue(myList.size() == 3);
この if のエラー メッセージexpected true, got false
。ハムクレストと比較して、
assertThat(myList, IsCollectionWithSize.hasSize(3));
または静的インポート
assertThat(myList, hasSize(3));
assertThat(myList, containsInOrder("first", "second"));
これに対するエラーメッセージはexpected collection with size 3, got list["blah", "blah" ...]
containsString
、IsIterableContainingInOrder
、IsIterableContainingInAnyOrder
などの追加のマッチャーがあります。
主に読みやすさのため。例えば:
StringAssert.StartsWith('abc', s);
おそらく以下よりも読みやすいです:
Assert.True(s.StartsWith('abc'))
ただし、いくつかのアサーションは、次のような他の有用なことを行いますAssert.Fail();
ある程度の読みやすさはあると思います。Assert.IsNotNull(obj) は、Assert.True(obj != null) よりも見やすいです。
読みやすさのために。テストは、コードのドキュメントにする必要があります。
可能な限り、表現なしで単純な古い assertXXX でfest assertを使用します。不可能な場合 (または述語で多くの作業が必要な場合)、私はhamcrestを使用します。assertXXX で複雑な式を使用することは、私にとって最後の手段です