web-dev-qa-db-fra.com

Hamcrest Date Matchers

J'ai besoin de tester avant/après les dates dans un certain cas de test. J'aimerais utiliser Hamcrest matchers si possible.

Existe-t-il des correspondants pour Hamcrest (Java) pour travailler avec Dates? Si tel est le cas, dans quel package/classe trouverais-je les fonctions de mise en correspondance des dates particulières?

33
smp7d

Le OrderingComparison :: GreaterThan matcher fonctionnera sur tout type comparable à lui-même (il est dans le org.hamcrest.number package, mais il n'est pas spécifique au numéro). La date est un tel type.

34
Tom Anderson

Il existe une bibliothèque d'apparieurs de dates hamcrest fournie par la bibliothèque à https://github.com/eXparity/hamcrest-date qui est également disponible pour maven, ivy, etc. à

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

Il prend en charge divers matchers pour les dates, ce qui permet des constructions telles que

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

ou

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

Vous pouvez jeter un œil aux nouveaux Matchs de Date qui seront ajoutés à hamcrest (je ne sais pas quand on y pense):

Discussion sur les égaliseurs de date/changements de code sur github

Après un rapide coup d'œil, il semble qu'il y aura un nouveau package org.hamcrest.date contenant:

  • IsAfter
  • IsBefore
  • IsSameDayOfTheMonth
  • IsSameDayOfTheWeek
  • IsSameDayOfTheYear
  • IsSameHour
  • IsSameInstant
  • IsSameMinute
  • IsSameMonth
  • IsSameSecond
  • IsSameYear
  • IsWithin
5
Guillermo Moscoso

Il existe certaines extensions hamcrest qui peuvent faciliter certains des tests liés aux dates. Veuillez vérifiez ici.

4
Aravind R. Yarram

Le Matchers#greaterThan matcher fonctionne avec Dates et d'autres Comparable objets.

Voici la façon de vérifier que votre date est supérieure ou égale (≥) à une date prévue:

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

https://assertj.github.io/doc/#assertj-core-recursive-comparison

org.assertj: assertj-core: 3.12.2

assertThat(actual)
    .usingRecursiveComparison()
    .ignoringFieldsMatchingRegexes("fieldToIgore")
    .isEqualTo(expected);
0

Il y a aussi le extension Cirneco . Il possède plusieurs Date correspondants spécifiques (par exemple monday()) et d'autres qui s'appliquent aux dates en raison de l'implémentation de Comparable (voir par exemple between(), betweenInclusive()). Il est prévu de prendre également en charge Joda Time dans la version JDK7 de la bibliothèque et les nouvelles classes basées sur la date dans la version JDK8 (principalement LocalDate).

Vous pouvez faire des affirmations comme:

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

Vous pouvez utiliser la dépendance suivante pour un projet compatible JDK7:

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

ou ce qui suit si vous utilisez JDK8

<dependency>
  <groupId>it.ozimov</groupId>
  <artifactId>Java8-hamcrest-matchers</artifactId>
  <version>0.7.0</version>
</dependency>
0
JeanValjean