79

私はマッチャーに比較的慣れていません。JUnit と組み合わせてhamcrest をいじっていますが、ちょっと気に入っています。

複数の選択肢のうちの1つが正しいと述べる方法はありますか?

何かのようなもの

assertThat( result, is( either( 1, or( 2, or( 3 ) ) ) ) ) //does not work in hamcrest

私がテストしているメソッドは、コレクションの 1 つの要素を返します。リストには複数の候補が含まれる場合があります。私の現在の実装では最初のヒットが返されますが、これは必須ではありません。可能な候補のいずれかが返された場合、テストケースが成功することを望みます。これを Java でどのように表現しますか?

(私はhamcrest-alternativesを受け入れています)

4

2 に答える 2

127
assertThat(result, anyOf(equalTo(1), equalTo(2), equalTo(3)))

ハムクレストのチュートリアルから:

anyOf- いずれかのマッチャーが一致する場合に一致し、短絡 (Java || など)

Javadocも参照してください。

さらに、非常に簡単に独自の Matcher を作成することもできます。

于 2008-09-30T14:13:19.070 に答える
86

マルコスは正しいですが、他にもいくつかのオプションがあります。まず第一に、どちらかまたは両方があります:

assertThat(result, either(is(1)).or(is(2)));

ただし、アイテムが 2 つ以上ある場合は、おそらく扱いにくくなります。さらに、タイプチェッカーは時々そのようなもので奇妙になります。あなたの場合、次のことができます:

assertThat(result, isOneOf(1, 2, 3))

または、配列/コレクションに既にオプションがある場合:

assertThat(result, isIn(theCollection))

Javadocも参照してください。

于 2011-07-02T02:20:48.147 に答える