2

xUnit のような基本的なアサーションが提供するものを超えて、他のアサーションが提供できるものを理解できませんAssert.True。単体テストで他のタイプのアサーションを使用する利点は何ですか?

4

4 に答える 4

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" ...]

containsStringIsIterableContainingInOrderIsIterableContainingInAnyOrderなどの追加のマッチャーがあります。

ハムクレスト

于 2012-10-22T13:54:49.547 に答える
2

主に読みやすさのため。例えば:

StringAssert.StartsWith('abc', s);

おそらく以下よりも読みやすいです:

Assert.True(s.StartsWith('abc'))

ただし、いくつかのアサーションは、次のような他の有用なことを行いますAssert.Fail();

于 2012-10-22T13:52:37.363 に答える
1

ある程度の読みやすさはあると思います。Assert.IsNotNull(obj) は、Assert.True(obj != null) よりも見やすいです。

于 2012-10-22T13:55:31.283 に答える
0

読みやすさのために。テストは、コードのドキュメントにする必要があります。

可能な限り、表現なしで単純な古い assertXXX でfest assertを使用します。不可能な場合 (または述語で多くの作業が必要な場合)、私はhamcrestを使用します。assertXXX で複雑な式を使用することは、私にとって最後の手段です

于 2012-10-22T18:21:51.393 に答える