С тех пор, как я начал изучать автоматизированное тестирование и практиковать 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()); } |
- Слава создателю этой милой маленькой библиотеки. Этот пример размещен на Github .
Ссылка: | Проверка DateTime и Date с Hamcrest от нашего партнера JCG Любоса Крнака в |