37

我需要在某个测试用例中的日期之前/之后进行测试。如果可能的话,我想使用Hamcrest 匹配器。

Hamcrest (Java) 是否有任何匹配器用于处理日期?如果是这样,我会在哪个包/类中找到特定的日期匹配器功能?

4

7 回答 7

38

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

于 2011-12-23T21:23:54.720 回答
18

该库在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());
于 2013-08-08T17:06:32.653 回答
6

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

github 上的日期匹配器讨论/代码更改

快速浏览后似乎会有一个新包org.hamcrest.date包含:

  • 是后
  • 之前
  • 是同一天
  • 本周同一天
  • 同年同日
  • 同时
  • 即刻
  • 相同分钟
  • 同月
  • IsSameSecond
  • 同年
  • 是在
于 2013-02-01T10:42:34.310 回答
4

有一些 hamcrest 扩展可以简化一些与日期相关的测试。请在此处查看。

于 2011-12-23T20:28:52.877 回答
1

Matchers#greaterThan匹配器适用于sDate和其他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)))
于 2017-06-29T12:40:35.507 回答
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>
于 2015-12-31T08:38:40.373 回答
-1

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

org.assertj:assertj-core:3.12.2

assertThat(actual)
    .usingRecursiveComparison()
    .ignoringFieldsMatchingRegexes("fieldToIgore")
    .isEqualTo(expected);
于 2019-06-07T18:22:36.070 回答