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