ハムクレストに数値範囲内の数値を比較する方法はありますか?私はこのようなものを探しています:
assertThat(50L, is(between(12L, 1658L)));
Jeffのソリューションの代わりに、次を使用することもできますboth
。
assertThat(50L, is(both(greaterThan(12L)).and(lessThan(1658L))));
かなり読みやすいと思います。チェックが失敗した場合にも、適切なエラーメッセージが表示されます。
期待される:is(<50L>より大きい値と<1658L>より小さい値)は次のようになります:<50L>
私はbetween
コアハムクレストマッチャーの一部であるとは思わないが、あなたはこのようなことをすることができる:
assertThat(number, allOf(greaterThan(min),lessThan(max)));
それはまだ少し醜いので、間にヘルパーメソッドを作成することができます
assertThat(number, between(min,max))
のようにbetween
見えます
allOf(greaterThan(min),lessThan(max))
それでも素晴らしい解決策ではありませんが、それはハムクレストマッチャーのように読めます。
公開されているものが見つからない場合は、独自のbetween
マッチャーhttp://code.google.com/p/hamcrest/wiki/Tutorialを作成するのは簡単です。
整数を扱っている場合は、次のcloseTo
方法の使用を検討する必要があります。
assertThat((double)nclient, is(closeTo(nserver, 1d)));
残念ながら、closeTo
整数はありませんが、32ビット整数はすべてdoubleで表すことができるため、単純にdoubleにキャストして続行できます。
これは、と完全に同等ではありませんがbetween
、役立つ場合があります。
もう1つのオプションは、Cirneco拡張機能を使用することです。between()
、などがbetweenInclusive()
あります。これらのマッチャーは、を実装する他のオブジェクトにも適用されますComparable
(などDate
)。
あなたの例に従うと、それは次のようになります:
assertThat(50L, between(12L, 1658L));
2つの境界を含める場合:
assertThat(50L, betweenIncluded(12L, 1658L));
または、境界の1つだけを含めたい場合:
assertThat(50L, betweenLowerBoundIncluded(12L, 1658L));
assertThat(50L, betweenUpperBoundIncluded(12L, 1658L));
JDK7準拠のプロジェクトには、次の依存関係を使用できます。
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>java7-hamcrest-matchers</artifactId>
<version>0.7.0</version>
</dependency>
または、JDK8を使用している場合は次のようになります
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>java8-hamcrest-matchers</artifactId>
<version>0.7.0</version>
</dependency>