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?
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.
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());
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:
Il existe certaines extensions hamcrest qui peuvent faciliter certains des tests liés aux dates. Veuillez vérifiez ici.
Le Matchers#greaterThan
matcher fonctionne avec Date
s 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)))
https://assertj.github.io/doc/#assertj-core-recursive-comparison
org.assertj: assertj-core: 3.12.2
assertThat(actual)
.usingRecursiveComparison()
.ignoringFieldsMatchingRegexes("fieldToIgore")
.isEqualTo(expected);
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>