2011-12-23 13 views
24

Necesito probar antes/después de las fechas en un caso de prueba determinado. Me gustaría usar Hamcrest matchers si es posible.Hamcrest Date Matchers

¿Hay equipos compatibles con Hamcrest (Java) para trabajar con fechas? Si es así, ¿en qué paquete/clase encontraría las funciones de fechador particular?

Respuesta

28

El comparador OrderingComparison::greaterThan funcionará en cualquier tipo que sea comparable a él (está en el paquete org.hamcrest.number, pero en realidad no es específico del número). La fecha es ese tipo.

+0

Gracias. Parece que se han deshecho de la clase a favor de un método de fábrica estático, lo que hace que un enlace realmente estable sea imposible, pero lo he solucionado todo lo que puedo. –

+0

Eso es verdad. También hay extensiones que proporcionan algunos métodos más fáciles de leer. Por ejemplo, [Cirneco] (https://github.com/ozimov/cirneco) proporciona el matcher 'J7Matchers :: after' que es un alias para' OrderingComparison :: greaterThan'. Desde mi punto de vista, _sematic_ siempre es importante en la prueba de unidad, por eso generalmente prefiero el enfoque de fujo proporcionado por Google Truth, pero a veces tengo que manejarlo con Hamcrest en proyectos heredados. – JeanValjean

4

Existen ciertas extensiones de limitación que pueden facilitar algunas de las pruebas relacionadas con las fechas. check here.

+0

Wow, esas son bastante limpio. –

3

Puede echar un vistazo a la nueva fecha de comparadores que se añadirán a hamcrest (no sé cuando el pensamiento):

Date matchers discussion/code changes on github

Después de un rápido vistazo, parece que habrá una nueva empaquetar org.hamcrest.date que contiene:

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

Hay una biblioteca de igualadores de fecha hamcrest proporcionado por la biblioteca de https://github.com/eXparity/hamcrest-date que también está disponible para Maven, hiedra, etc en

<dependency> 
    <groupId>org.exparity</groupId> 
    <artifactId>hamcrest-date</artifactId> 
    <version>1.1.0</version> 
</dependency> 

Es compatible con varios comparadores para fechas así permite construcciones tales como

Date myBirthday = new Date(); 
MatcherAssert.assertThat(myBirthday, DateMatchers.after(Moments.today())); 

o

Date myBirthday = new Date(); 
MatcherAssert.assertThat(myBirthday, DateMatchers.isToday()); 
0

También está el Cirneco extension. Tiene varios emparejadores específicos Date (por ejemplo, monday()) y otros que se aplican a las fechas debido a la implementación de Comparable (ver, por ejemplo, between(),). El plan es admitir también Joda Time en la versión JDK7 de la biblioteca y las nuevas clases basadas en fechas en la versión JDK8 (principalmente LocalDate).

Usted puede hacer afirmaciones como:

final Date date = new Date(); 
assertThat(date, is(monday())); // JUnit style 
given(date).assertIs(monday()); // Cirneco style 

Usted puede usar la siguiente dependencia para un proyecto JDK7 compatible:

<dependency> 
    <groupId>it.ozimov</groupId> 
    <artifactId>java7-hamcrest-matchers</artifactId> 
    <version>0.7.0</version> 
</dependency> 

o el siguiente si está utilizando JDK8

<dependency> 
    <groupId>it.ozimov</groupId> 
    <artifactId>java8-hamcrest-matchers</artifactId> 
    <version>0.7.0</version> 
</dependency> 
2

El matcher Matchers#greaterThan funciona con Date sy otros Comparable objetos.

Aquí está la manera de comprobar que la fecha es mayor o igual (≥) a una fecha esperada:

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)))