2011-12-23 9 views
24

Muszę przetestować przed/po datach w danym przypadku testowym. Jeśli to możliwe, chciałbym użyć Hamcrest matchers.Hamcrest Date Matchers

Czy są jakieś dopasowań dla Hamcrest (Java) do pracy z datami? Jeśli tak, to w jakim pakiecie/klasie znajdowałabym określony mechanizm dopasowania daty?

Odpowiedz

28

Matcher będzie działał na każdym typie, który jest porównywalny do niego (jest w pakiecie org.hamcrest.number, ale w rzeczywistości nie jest zależny od liczby). Data jest tego typu.

+0

Dzięki. Wygląda na to, że pozbyli się klasy na rzecz statycznej metody fabrycznej, która uniemożliwia naprawdę stabilne łącze, ale naprawiłem ją tak daleko, jak tylko potrafię. –

+0

To prawda. Istnieją również rozszerzenia, które zapewniają bardziej łatwe do odczytania metody. Np. [Cirneco] (https://github.com/ozimov/cirneco) udostępnia Matchera 'J7Matchers :: after', który jest aliasem dla' OrderingComparison :: greaterThan'. Z mojego punktu widzenia _sematic_ jest zawsze ważny w testach jednostkowych, dlatego zazwyczaj wolę pełne podejście zapewniane przez Google Truth, ale czasami muszę radzić sobie z Hamcrest w starszych projektach. – JeanValjean

4

Istnieją pewne rozszerzenia hamcrest, które mogą ułatwić niektóre testy związane z datami. Proszę check here.

+0

Wow, to są całkiem miłe. –

3

Można rzucić okiem na nowe dopasowujące datę, które zostaną dodane do hamcrest (nie wiem, kiedy myśl):

Date matchers discussion/code changes on github

Po szybkim spojrzeniem wydaje się, że będzie nowy pakowania org.hamcrest.date zawierające:

  • IsAfter
  • IsBefore
  • IsSameDayOfTheMonth
  • IsSameDayOfTheWeek
  • IsSameDayOfTheYear
  • IsSameHour
  • IsSameInstant
  • IsSameMinute
  • IsSameMonth
  • IsSameSecond
  • IsSameYear
  • IsWithin
12

Jest biblioteka hamcrest data dopasowujących świadczone przez biblioteki w https://github.com/eXparity/hamcrest-date który jest również dostępny dla Maven, bluszcz, etc w

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

Obsługuje różne dopasowujących dla dat więc pozwala konstrukcje takie jak

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

lub

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

Istnieje również Cirneco extension. Ma kilka specyficznych dopasowań Date (na przykład monday()) i innych, które dotyczą dat z powodu implementacji Comparable (patrz na przykład between(), betweenInclusive()). Plan ma również wspierać czasy Joda w wersji JDK7 biblioteki oraz nowe klasy oparte na datach w wersji JDK8 (głównie LocalDate).

Można zrobić twierdzeń typu:

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

można wykorzystywać następujące zależności dla projektu JDK7 zgodny:

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

lub następujących jeśli używasz JDK8

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

Matcher Matchers#greaterThan współpracuje z Date s oraz innymi Comparable obiektów.

Oto sposób, aby sprawdzić, czy data jest większa lub równa (≥) do pewnego przewidywanym terminem:

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