我需要在某个测试用例中的日期之前/之后进行测试。如果可能的话,我想使用Hamcrest 匹配器。
Hamcrest (Java) 是否有任何匹配器用于处理日期?如果是这样,我会在哪个包/类中找到特定的日期匹配器功能?
我需要在某个测试用例中的日期之前/之后进行测试。如果可能的话,我想使用Hamcrest 匹配器。
Hamcrest (Java) 是否有任何匹配器用于处理日期?如果是这样,我会在哪个包/类中找到特定的日期匹配器功能?
OrderingComparison::greaterThan匹配器适用于任何与自身可比的类型(它在org.hamcrest.number
包中,但实际上不是特定于数字的)。日期就是这样一种类型。
该库在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());
您可以查看将添加到 hamcrest 的新日期匹配器(我不知道何时想到):
快速浏览后似乎会有一个新包org.hamcrest.date包含:
有一些 hamcrest 扩展可以简化一些与日期相关的测试。请在此处查看。
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)))
还有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>
https://assertj.github.io/doc/#assertj-core-recursive-comparison
org.assertj:assertj-core:3.12.2
assertThat(actual)
.usingRecursiveComparison()
.ignoringFieldsMatchingRegexes("fieldToIgore")
.isEqualTo(expected);