Библиотека Hamcrest на сегодняшний день

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

В частности, я ищу совпадения по строкам:

assertThat(myDate, is(withinMinutes(sourceDate, 10)));
assertThat(myDate, is(afterDate(sourceDate)));
assertThat(myDate, is(betweenDates(startDate, endDate)));

Я хотел посмотреть, есть ли что-нибудь там, прежде чем я свернул свой собственный.


person Dan    schedule 13.08.2012    source источник
comment
Возможно, вам стоит взглянуть на Yoda Time, с этой библиотекой должно быть легко реализовать эти сопоставления   -  person Absurd-Mind    schedule 14.08.2012
comment
Это джедайский форк Joda Time?   -  person David Harkness    schedule 15.08.2012


Ответы (2)


Я написал набор совпадений даты, которые выглядят как то, что вам нужно. Источник находится здесь https://github.com/eXparity/hamcrest-date. Пример использования встроенного сопоставителя

assertThat(dateUnderTest, DateMatchers.within(2, TimeUnit.SECONDS, new Date()));

Вы можете добавить его с помощью maven, добавив это в свой pom.xml

<dependency>
    <groupId>org.exparity</groupId>
    <artifactId>hamcrest-date</artifactId>
    <version>2.0.1</version>
</dependency>
person stewbis    schedule 15.09.2012
comment
Я думаю, что то, на что вы здесь ссылаетесь, на самом деле является тем, что нужно плакату, но чтобы избежать восприятия саморекламы, было бы неплохо привести в ответ несколько примеров того, как это будет работать. - person EdC; 16.09.2012
comment
Спасибо за наводку, добавил пример - person stewbis; 16.09.2012

Вы должны попробовать fest-assert, он не совместим с hamcrest, но ИМХО превосходит его ("более свободный "). Например, с датой:

@Test
public void is_between_date_assertions_examples() {

    // various usage of isBetween assertion,
    // Note that isBetween(2002-12-17, 2002-12-19) includes start date but end date :
    assertThat(theTwoTowers.getReleaseDate())
            // = 2002-12-18
            .isBetween(theFellowshipOfTheRing.getReleaseDate(), theReturnOfTheKing.getReleaseDate())
            .isBetween(parse("2002-12-17"), parse("2002-12-19")) // [2002-12-17, 2002-12-19[
            .isBetween("2002-12-17", "2002-12-19") // [2002-12-17, 2002-12-19[
            .isNotBetween("2002-12-17", "2002-12-18") // [2002-12-17, 2002-12-18[
            .isBetween("2002-12-17", "2002-12-18", true, true); // [2002-12-17, 2002-12-18]
}

Полный пример с датой: здесь, остальные здесь.

person gontard    schedule 22.08.2012
comment
обе ссылки теперь недействительны. - person Alex; 17.05.2014