web-dev-qa-db-ja.com

間のハンクレスト数比較

Hamcrestに、数値範囲内の数値を比較する方法はありますか?私はこのようなものを探しています:

assertThat(50L, is(between(12L, 1658L)));
51
saw303

ジェフのソリューションに代わる方法は、bothを使用することです。

assertThat(50L, is(both(greaterThan(12L)).and(lessThan(1658L))));

それは非常に読みやすいと思います。また、チェックが失敗した場合に適切なエラーメッセージが表示されます。

予想:is(<50L>より大きい値および<1658L>より小さい値)取得:<50L>

78

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

24
Jeff Storey

整数を扱う場合は、closeToメソッドの使用を検討する必要があります。

assertThat((double)nclient, is(closeTo(nserver, 1d)));

残念ながら、整数にはcloseToはありませんが、32ビット整数はすべてdoubleで表現できるため、単純にdoubleにキャストして続行できます。

これはbetweenとまったく同じではありませんが、役立つ場合があります。

16

別のオプションは、 Cirneco extension を使用することです。 between()betweenInclusive()などがあります。これらのマッチャーは、ComparableDateなど)を実装する他のオブジェクトにも適用されます。

あなたの例に従って、それは次のようになります:

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>
2
JeanValjean