2011-12-23 55 views
24

我需要在某个测试用例的日期之前/之后进行测试。如果可能,我想使用Hamcrest matchersHamcrest Date Matchers

Hamcrest(Java)有没有与日期合作的匹配器?如果是这样,我可以找到哪些包/类可以找到特定的日期匹配器功能?

回答

28

OrderingComparison::greaterThan匹配器将工作在任何类型可以比较自己(它在org.hamcrest.number包,但它并不实际数量具体)。日期是这样一种类型。

+0

谢谢。看起来他们已经摆脱了这个班,转而采用静态工厂方法,这使得一个非常稳定的链接成为不可能,但我已经尽可能地修复了它。 – 2013-09-28 20:57:12

+0

的确如此。还有一些扩展提供了一些更易于阅读的方法。例如,[Cirneco](https://github.com/ozimov/cirneco)提供了匹配器'J7Matchers :: after',它是'OrderingComparison :: greaterThan'的别名。从我的观点来看,_sematic_在单元测试中一直都很重要,这就是为什么我通常更喜欢Google Truth提供的无用方法,但有时我必须在传统项目中处理Hamcrest。 – JeanValjean 2016-01-09 23:31:11

4

有一些hamcrest扩展可以减轻一些与日期有关的测试。请check here.

+0

哇,这些都是非常整洁。 – 2012-01-07 05:59:11

3

你可以看看将被添加到hamcrest新的日期匹配器(我不知道什么时候想):

Date matchers discussion/code changes on github

快速浏览一下之后,似乎将有一个新的打包org.hamcrest.date含有:

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

有由库在https://github.com/eXparity/hamcrest-date提供hamcrest日期匹配器的库,它也可用于行家,常春藤,等在

<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()); 
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> 
2

Matchers#greaterThan匹配器与Date s和其他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)))