我需要在特定测试用例的日期之前/之后进行测试。如果可能,我想使用Hamcrest matchers。
Hamcrest(Java)是否有与日期合作的匹配器?如果是这样,我会在哪个包/类中找到特定的日期匹配器?
答案 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 ,其中包含:
答案 4 :(得分:1)
答案 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);