Hamcrestで複数の正しい結果(or-matcherはありますか?)
質問
私はマッチャーが比較的新しいです。 JUnitと組み合わせて hamcrest をいじくり回していますが、ちょっと気に入っています。
複数の選択肢の1つが正しいと述べる方法はありますか?
次のようなもの
assertThat( result, is( either( 1, or( 2, or( 3 ) ) ) ) ) //does not work in hamcrest
テストしているメソッドは、コレクションの1つの要素を返します。リストには複数の候補が含まれる場合があります。現在の実装では最初のヒットが返されますが、これは要件ではありません。可能性のある候補のいずれかが返された場合、テストケースが成功することを望みます。これをJavaでどのように表現しますか?
(hamcrest-alternativesを受け入れています)
解決
assertThat(result, anyOf(equalTo(1), equalTo(2), equalTo(3)))
anyOf-いずれかのマッチャーが一致する場合に一致、短絡(Java ||など)
Javadoc もご覧ください。
さらに、独自のMatcherを作成することもできます。これは非常に簡単です。
他のヒント
marcosは正しいですが、他にもいくつかのオプションがあります。まず、 のいずれかまたは両方があります:
assertThat(result, either(is(1)).or(is(2)));
しかし、3つ以上のアイテムがある場合、おそらく扱いにくいでしょう。加えて、タイプチェッカーは時々そのようなもので奇妙になります。あなたの場合、次のことができます:
assertThat(result, isOneOf(1, 2, 3))
または配列/コレクションにすでにオプションがある場合:
assertThat(result, isIn(theCollection))
Javadoc も参照してください。
所属していません StackOverflow