Hamcrest Date De Rapprochement

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

Existe-t-il des correspondants pour Hamcrest (Java) pour travailler avec des Dates? Si oui, dans quel paquet / classe trouverais-je les fonctions de correspondance de date particulières?

26
demandé sur Basil Bourque 2011-12-24 00:05:28

6 réponses

LeOrderingComparison::greaterThan matcher fonctionnera sur n'importe quel type qui est comparable à lui-même (il est dans le paquet org.hamcrest.number, mais ce n'est pas réellement spécifique au nombre). La Date est un tel type.

30
répondu Tom Anderson 2013-09-28 20:48:45

Il y a une bibliothèque de matchers de date 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());
12
répondu stewbis 2014-12-17 23:13:33

Certaines extensions hamcrest peuvent faciliter certains tests liés aux dates. S'il vous plaît Vérifier ici.

4
répondu Aravind R. Yarram 2017-09-11 12:24:00

Vous pouvez jeter un oeil aux nouveaux Matchers de Date qui seront ajoutés à hamcrest (Je ne sais pas quand pensé):

Date de rapprochement de discussion, les changements de code sur github

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

  • IsAfter
  • avant
  • IsSameDayOfTheMonth
  • Issamedayoftheek
  • Issameday of the Year
  • IsSameHour
  • IsSameInstant
  • IsSameMinute
  • IsSameMonth
  • IsSameSecond
  • IsSameYear
  • est dans
3
répondu Guillermo Moscoso 2013-02-01 10:42:34

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 attendue:

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)))
2
répondu naXa 2017-06-29 12:40:35

Il y a aussi L'extension Cirneco . Il a plusieurs Date matchers spécifiques (par exemple monday()) et d'autres qui s'appliquent aux dates en raison de la mise en œuvre de Comparable (Voir par exemple between(), betweenInclusive()). Le plan est de prendre en charge également 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 assertions 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
répondu JeanValjean 2016-03-16 18:49:00