Hamcrest Date Matchers - PullRequest
       21

Hamcrest Date Matchers

30 голосов
/ 24 декабря 2011

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

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

Ответы [ 7 ]

34 голосов
/ 24 декабря 2011

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

14 голосов
/ 08 августа 2013

В библиотеке https://github.com/eXparity/hamcrest-date имеется библиотека совпадений дат Hamcrest, которая также доступна для 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());
5 голосов
/ 01 февраля 2013

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

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

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

  • IsAfter
  • IsBefore
  • IsSameDayOfTheMonth
  • IsSameDayOfTheWeek
  • IsSameDayOfTheYear
  • IsSameHour
  • IsSameInstant
  • IsSameMinute
  • IsSameMonth
  • IsSameSecond
  • IsSameYear
  • IsWithin
4 голосов
/ 24 декабря 2011

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

1 голос
/ 29 июня 2017

Сопоставитель Matchers#greaterThan работает с Date s и другими 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)))
0 голосов
/ 07 июня 2019

https://assertj.github.io/doc/#assertj-core-recursive-comparison

org.assertj: assertj-core: 3.12.2

assertThat(actual)
    .usingRecursiveComparison()
    .ignoringFieldsMatchingRegexes("fieldToIgore")
    .isEqualTo(expected);
0 голосов
/ 31 декабря 2015

Существует также расширение 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>
...