Hamcrest Дата Matchers

Мне нужно, чтобы проверить до/после даты в определенном тесте. Я хотел бы использовать Hamcrest matchers если это возможно.

есть ли какие-либо сопоставители для Hamcrest (Java) для работы с датами? Если да, то в каком пакете/классе я найду конкретные функции сопоставления дат?

6 ответов


на OrderingComparison:: greaterThan matcher будет работать на любом типе, который сопоставим с собой (он находится в org.hamcrest.number пакет, но на самом деле он не зависит от номера). Дата-это такой тип.


существует библиотека Hamcrest даты matchers, предоставляемых библиотекой в https://github.com/eXparity/hamcrest-date что также доступно для maven, плюща, etc на

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

он поддерживает различные сопоставители для дат, поэтому позволяет создавать такие конструкции, как

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

или

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

есть некоторые расширения hamcrest, которые могут облегчить некоторые из тестирования, связанные с датами. Пожалуйста!--1-->регистрация здесь.


вы можете взглянуть на новые Сопоставители даты, которые будут добавлены в hamcrest (я не знаю, когда думал):

дата сопоставления обсуждение / изменения кода на github

после быстрого взгляда кажется, что будет новый пакет org.hamcrest.дата содержащий:

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

на Matchers#greaterThan matcher работает с Dateи другие Comparable объекты.

вот способ проверить, что ваша дата больше или равна ( ≥ ) некоторой ожидаемой дате:

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

есть еще расширение Cirneco. Он имеет несколько Date конкретных вычислителей (например,monday()) и другие, которые применяются к датам из-за реализации Comparable (см., например,between(), betweenInclusive()). Планируется также поддерживать время Joda в версии библиотеки JDK7 и новые классы на основе дат в версии JDK8 (в основном LocalDate).

вы можете делать утверждения типа:

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

вы можете использовать следующую зависимость для Проект JDK7-совместимый:

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

или следующее, Если вы используете JDK8

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