質問

私はマッチャーが比較的新しいです。 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)))

Hamcrestチュートリアルから:

  

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 も参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top