NUnitと並列のjUnitはありますCollectionAssert
か?
NUnitと並列のjUnitはありますCollectionAssert
か?
回答:
JUnit 4.4を使用assertThat()
すると、Hamcrestコードと一緒に使用して(心配しないでください。JUnitに付属しています。追加の必要はありません.jar
)、コレクションを操作するものを含む複雑な自己記述型アサーションを生成できます。
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"))));
このアプローチを使用すると、失敗したときにアサーションの適切な説明を自動的に取得できます。
直接ではありません。jUnit(および他のテストフレームワーク)とうまく統合する豊富なマッチングルールのセットを提供するHamcrestの使用をお勧めします
FEST FluentAssertionsをご覧ください。私見では、Hamcrestよりも使いやすく(そして同様に強力で拡張可能など)、流暢なインターフェイスのおかげでIDEのサポートが向上しています。https://github.com/alexruiz/fest-assert-2.x/wiki/Using-fest-assertionsを参照してください
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
}
hasItems(expected1.toArray(new String[expected1.size()]))
。それはあなたにより良い失敗メッセージを与えるでしょう。