С тех пор, как я начал изучать автоматизированное тестирование и практиковать TDD, проверка значений даты была болезненной. К счастью, есть хорошая библиотека для устаревших Date и новых API Java 8 DateTime , которая излечивает эту боль.
Если вы принадлежите к более здоровой части сообщества разработчиков Java и ежедневно практикуете модульное тестирование, вы, вероятно, знакомы с библиотекой Hamcrest Java . Это может сделать ваши тесты намного более читабельными. Его архитектура очень модульная и используется различными другими библиотеками тестирования.
Большая часть его гибкости — это концепция Matcher . Я не собираюсь сейчас углубляться в эту концепцию. Если вы не знакомы, просто взгляните на учебник Hamcrest . Одним из подходящих средств, которые вы можете подключить к своему набору инструментов тестирования, является библиотека hamcrest-date . С помощью этой библиотеки мы можем легко проверить, что дата была сгенерирована в определенном диапазоне:
|
01
02
03
04
05
06
07
08
09
10
11
|
@Testpublic 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
|
@Testpublic 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
|
@Testpublic 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 Любоса Крнака в |