86

NUnit に相当する jUnit はありますCollectionAssertか?

4

4 に答える 4

127

JUnit 4.4 を使用assertThat()すると、Hamcrestコード (心配しないでください。JUnit に同梱されているため、追加の は必要ありません) と一緒に使用して.jar、コレクションで動作するものを含む複雑な自己記述型 assert を生成できます。

import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.*;
import static org.hamcrest.CoreMatchers.*;

List<String> l = Arrays.asList("foo", "bar");
assertThat(l, hasItems("foo", "bar"));
assertThat(l, not(hasItem((String) null)));
assertThat(l, not(hasItems("bar", "quux")));
// check if two objects are equal with assertThat()

// the following three lines of code check the same thing.
// the first one is the "traditional" approach,
// the second one is the succinct version and the third one the verbose one 
assertEquals(l, Arrays.asList("foo", "bar")));
assertThat(l, is(Arrays.asList("foo", "bar")));
assertThat(l, is(equalTo(Arrays.asList("foo", "bar"))));

このアプローチを使用すると、アサートが失敗したときに、アサートの適切な説明を自動的に取得できます。

于 2009-07-06T12:32:52.967 に答える
4

直接ではありません。jUnit (および他のテスト フレームワーク) とうまく統合する豊富なマッチング ルール セットを提供するHamcrestの使用をお勧めします。

于 2009-07-06T12:32:09.127 に答える
2

Joachim Sauer のソリューションは優れていますが、検証したい一連の期待値が結果に含まれている場合は機能しません。これは、結果を比較したいテストで既に生成された、または一定の期待値がある場合、または結果にマージされると予想される複数の期待値がある場合に発生する可能性があります。List::containsAllしたがって、マッチャーを使用する代わりに、単に使用できますassertTrue。例:

@Test
public void testMerge() {
    final List<String> expected1 = ImmutableList.of("a", "b", "c");
    final List<String> expected2 = ImmutableList.of("x", "y", "z");
    final List<String> result = someMethodToTest(); 

    assertThat(result, hasItems(expected1)); // COMPILE ERROR; DOES NOT WORK
    assertThat(result, hasItems(expected2)); // COMPILE ERROR; DOES NOT WORK

    assertTrue(result.containsAll(expected1));  // works~ but has less fancy
    assertTrue(result.containsAll(expected2));  // works~ but has less fancy
}
于 2016-10-18T16:25:12.023 に答える
2

FEST Fluent アサーションを見てください。私見では、それらは Hamcrest よりも使いやすく (そして同様に強力で拡張可能など)、流暢なインターフェースのおかげで IDE サポートが優れています。https://github.com/alexruiz/fest-assert-2.x/wiki/Using-fest-assertionsを参照してください

于 2012-09-19T18:50:45.853 に答える