Статьи

Проверка даты и времени с помощью Hamcrest

С тех пор, как я начал изучать автоматизированное тестирование и практиковать TDD, проверка значений даты была болезненной. К счастью, есть хорошая библиотека для устаревших Date и новых API Java 8 DateTime , которая излечивает эту боль.

Если вы принадлежите к более здоровой части сообщества разработчиков Java и ежедневно практикуете модульное тестирование, вы, вероятно, знакомы с библиотекой Hamcrest Java . Это может сделать ваши тесты намного более читабельными. Его архитектура очень модульная и используется различными другими библиотеками тестирования.

Большая часть его гибкости — это концепция Matcher . Я не собираюсь сейчас углубляться в эту концепцию. Если вы не знакомы, просто взгляните на учебник Hamcrest . Одним из подходящих средств, которые вы можете подключить к своему набору инструментов тестирования, является библиотека hamcrest-date . С помощью этой библиотеки мы можем легко проверить, что дата была сгенерирована в определенном диапазоне:

01
02
03
04
05
06
07
08
09
10
11
@Test
public void validateDate() {
    //GIVEN
    Date expectedDate = new Date();
  
    //WHEN
    Date actualDate = new Date();
  
    //THEN
    assertThat(actualDate, DateMatchers.within(2, ChronoUnit.SECONDS, expectedDate));
}

Мы можем сделать это также для типов Java 8:

01
02
03
04
05
06
07
08
09
10
11
@Test
public void validateDateTime() {
    //GIVEN
    LocalDateTime expectedDateTime = LocalDateTime.now();
  
    //WHEN
    LocalDateTime actualDateTime = LocalDateTime.now();
  
    //THEN
    assertThat(actualDateTime, LocalDateTimeMatchers.within(2, ChronoUnit.SECONDS, expectedDateTime));
}

Или выберите различные экзотические проверки, которые предоставляет библиотека hamcrest-core :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
@Test
public void validateZonedDateTime() {
    //GIVEN
    ZonedDateTime expectedDateTime = ZonedDateTime.of(2016, 3, 20, 13, 3, 0, 0, ZoneId.of("GMT+1"));
  
    //WHEN
    ZonedDateTime actualDateTime = ZonedDateTime.of(2016, 3, 20, 13, 3, 0, 0, ZoneId.of("GMT-0"));
  
    //THEN
    assertThat(actualDateTime, ZonedDateTimeMatchers.sameDay(expectedDateTime));
    assertThat(actualDateTime, ZonedDateTimeMatchers.after(expectedDateTime));
    assertThat(actualDateTime, ZonedDateTimeMatchers.isSunday());
    assertThat(actualDateTime, ZonedDateTimeMatchers.isMarch());
}
Ссылка: Проверка DateTime и Date с Hamcrest от нашего партнера JCG Любоса Крнака в