Hamcrest日期匹配器

时间:2011-12-23 20:05:28

标签: java date hamcrest

我需要在特定测试用例的日期之前/之后进行测试。如果可能,我想使用Hamcrest matchers

Hamcrest(Java)是否有与日期合作的匹配器?如果是这样,我会在哪个包/类中找到特定的日期匹配器?

7 个答案:

答案 0 :(得分:34)

OrderingComparison::greaterThan匹配器可以处理任何与自身类似的类型(它位于org.hamcrest.number包中,但实际上并不是特定于数字的)。日期就是这样一种类型。

答案 1 :(得分:14)

图书馆在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());

答案 2 :(得分:4)

某些hamcrest扩展可以简化与日期相关的一些测试。请check here.

答案 3 :(得分:4)

您可以查看将添加到hamcrest的新日期匹配器(我不知道何时会想到):

Date matchers discussion/code changes on github

快速查看后,似乎会有一个新的包 org.hamcrest.date ,其中包含:

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

答案 4 :(得分:1)

Matchers#greaterThan匹配器可与randInt(2,4)和其他Date对象配合使用。

以下是检查您的日期是否大于或等于(≥)预期日期的方法:

Comparable

答案 5 :(得分:0)

还有Cirneco extension。由于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>

答案 6 :(得分:0)

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

org.assertj:assertj-core:3.12.2

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