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?
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.
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());
Certaines extensions hamcrest peuvent faciliter certains tests liés aux dates. S'il vous plaît Vérifier ici.
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
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 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)))
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>