web-dev-qa-db-ja.com

Hamcrest日付マッチャー

特定のテストケースの日付の前後にテストする必要があります。可能であれば Hamcrestマッチャー を使用したいと思います。

日付を操作するためのHamcrest(Java)のマッチャーはありますか?もしそうなら、どのパッケージ/クラスで特定の日付マッチャー関数を見つけることができますか?

33
smp7d

OrderingComparison :: greaterThan マッチャーは、それ自体に匹敵するすべての型で機能します(org.hamcrest.numberパッケージですが、実際には番号固有ではありません)。日付はそのようなタイプです。

34
Tom Anderson

https://github.com/eXparity/hamcrest-date には、ライブラリによって提供されるhamcrest日付マッチャーのライブラリがあります。これは、maven、ivyなどでも利用できます。

<dependency>
    <groupId>org.exparity</groupId>
    <artifactId>hamcrest-date</artifactId>
    <version>1.1.0</version>
</dependency>

日付のさまざまなマッチャーをサポートしているため、次のような構成が可能です。

Date myBirthday = new Date();
MatcherAssert.assertThat(myBirthday, DateMatchers.after(Moments.today()));

または

Date myBirthday = new Date();
MatcherAssert.assertThat(myBirthday, DateMatchers.isToday());
14
stewbis

Hamcrestに追加される新しいDate Matcherを見ることができます(いつ考えたかはわかりません)。

githubでの日付マッチャーのディスカッション/コードの変更

簡単に見てみると、新しいパッケージorg.hamcrest.dateが含まれているようです:

  • IsAfter
  • IsBefore
  • IsSameDayOfTheMonth
  • IsSameDayOfTheWeek
  • IsSameDayOfTheYear
  • IsSameHour
  • IsSameInstant
  • IsSameMinute
  • IsSameMonth
  • IsSameSecond
  • IsSameYear
  • IsWithin
5

日付に関連するテストの一部を容易にすることができる特定のhamcrest拡張機能があります。 ここをチェックしてください。

4

Matchers#greaterThan マッチャーはDatesおよび他のComparableオブジェクトで動作します。

あなたの日付がいくつかの期待される日付以上であることを確認する方法は次のとおりです:

import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.core.AnyOf.anyOf;
...

Date expectedMin = new Date()
// Execute the method being tested
Date resultDate = getDate();
// Validate
assertThat(resultDate, anyOf(greaterThan(expectedMin), equalTo(expectedMin)))
1
naXa

https://assertj.github.io/doc/#assertj-core-recursive-comparison

org.assertj:assertj-core:3.12.2

assertThat(actual)
    .usingRecursiveComparison()
    .ignoringFieldsMatchingRegexes("fieldToIgore")
    .isEqualTo(expected);
0

Cirneco拡張 もあります。いくつかのDate固有のマッチャー(たとえばmonday())と、Comparableの実装のために日付に適用される他のマッチャーがあります(たとえば、between()を参照)。 betweenInclusive())。ライブラリのJDK7バージョンのJoda Timeと、JDK8バージョン(主にLocalDate)の新しい日付ベースのクラスもサポートする予定です。

次のようなアサーションを実行できます。

final Date date = new Date();
assertThat(date, is(monday())); // JUnit style
given(date).assertIs(monday()); // Cirneco style

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