java - matchers - Fechadores de fecha de Hamcrest
import static org hamcrest corematchers containsstring (6)
Hay ciertas extensiones de hamcrest que pueden facilitar algunas de las pruebas relacionadas con las fechas. Por favor, compruebe aquí.
Necesito hacer pruebas antes / después de las fechas en un caso de prueba determinado. Me gustaría usar los matchers de Hamcrest si es posible.
¿Hay alguna coincidencia para Hamcrest (Java) para trabajar con fechas? Si es así, ¿en qué paquete / clase encontraría las funciones de comparación de fecha en particular?
Hay una biblioteca de comparadores de fechas hamcrest proporcionada por la biblioteca en https://github.com/eXparity/hamcrest-date que también está disponible para maven, ivy, etc. en
<dependency>
<groupId>org.exparity</groupId>
<artifactId>hamcrest-date</artifactId>
<version>1.1.0</version>
</dependency>
Es compatible con varios emparejadores para las fechas por lo que 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());
Puedes echar un vistazo a los nuevos Date Matchers que se agregarán a hamcrest (no sé cuándo pensé):
Discusión de coincidencias de fecha / cambios de código en github
Después de un vistazo rápido, parece que habrá un nuevo paquete org.hamcrest.date que contiene:
- Es despues
- IsBefore
- IsSameDayOfTheMonth
- IsSameDayOfTheWeek
- IsSameDayOfTheYear
- IsSameHour
- IsSameInstant
- IsSameMinute
- IsSameMonth
- IsSameSecond
- IsSameYear
- IsWithin
También existe la Cirneco . Tiene varios emparejadores específicos de fecha (por ejemplo, monday()
) y otros que se aplican a las fechas debido a la implementación de Comparable
(ver, por ejemplo, between()
, betweenInclusive()
). El plan es admitir también Joda Time en la versión JDK7 de la biblioteca y las nuevas clases basadas en fecha en la versión JDK8 (principalmente LocalDate
).
Puedes hacer afirmaciones como:
final Date date = new Date();
assertThat(date, is(monday())); // JUnit style
given(date).assertIs(monday()); // Cirneco style
Puede usar la siguiente dependencia para un proyecto compatible con JDK7:
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>java7-hamcrest-matchers</artifactId>
<version>0.7.0</version>
</dependency>
o lo siguiente si está utilizando JDK8
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>java8-hamcrest-matchers</artifactId>
<version>0.7.0</version>
</dependency>
Matchers#greaterThan
matcher funciona con Date
s y otros objetos Comparable
.
Esta es la forma de verificar que su fecha sea mayor o igual (≥) a alguna 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)))
El OrderingComparison::greaterThan funcionará en cualquier tipo que sea comparable a sí mismo (está en el paquete org.hamcrest.number
, pero en realidad no es específico de un número). La fecha es tal tipo.