Подтвердить что ты не робот

Составы Дата смерти

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

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

4b9b3361

Ответ 1

Сопряжение OrderingComparison:: moreThan будет работать на любом типе, который сопоставим с самим собой (он находится в пакете org.hamcrest.number, но не на самом деле не зависит от числа), Дата такого типа.

Ответ 2

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

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

Ответ 3

Существуют определенные расширения hamcrest, которые могут облегчить некоторые тесты, связанные с датами. Пожалуйста, здесь.

Ответ 4

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

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

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

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

Ответ 5

Matchers#greaterThan работает с 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)))

Ответ 6

Существует также расширение Cirneco. Он имеет несколько спецификаторов Date (например, monday()) и другие, которые применяются к датам из-за реализации Comparable (см., Например, between(), betweenInclusive()). Планируется также поддержка Joda Time в версии библиотеки 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>