Hamcrestに、数値範囲内の数値を比較する方法はありますか?私はこのようなものを探しています:
assertThat(50L, is(between(12L, 1658L)));
ジェフのソリューションに代わる方法は、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
とまったく同じではありませんが、役立つ場合があります。
別のオプションは、 Cirneco extension を使用することです。 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>