org matchers equalto corematchers containsstring assertequals java date hamcrest

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.