60

ハムクレストに数値範囲内の数値を比較する方法はありますか?私はこのようなものを探しています:

assertThat(50L, is(between(12L, 1658L)));
4

4 に答える 4

94

Jeffのソリューションの代わりに、次を使用することもできますboth

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

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

期待される:is(<50L>より大きい値と<1658L>より小さい値)は次のようになります:<50L>

于 2012-10-08T16:50:10.937 に答える
25

私は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を作成するのは簡単です。

于 2012-10-08T14:57:50.930 に答える
16

整数を扱っている場合は、次のcloseTo方法の使用を検討する必要があります。

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

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

これは、と完全に同等ではありませんがbetween、役立つ場合があります。

于 2013-09-09T09:42:26.690 に答える
2

もう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>
于 2015-12-30T13:54:38.833 に答える