【问题标题】:Hamcrest library for date日期的 Hamcrest 库
【发布时间】:2012-08-10 03:00:39
【问题描述】:

我一直在四处寻找,但没有发现任何有用的东西。是否有任何与 hamcrest 一起使用且具有广泛日期匹配的第三方库?

具体来说,我正在寻找符合以下方面的匹配器:

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

在我自己动手之前,我想看看那里是否有任何东西。

【问题讨论】:

  • 也许你应该看看 Yoda Time,有了这个库应该很容易实现这些匹配器
  • 那是Joda Time的绝地分叉吗?

标签: java unit-testing junit hamcrest


【解决方案1】:

您应该尝试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]
}

带有日期的完整示例为here,其他为there

【讨论】:

  • 这两个链接现在都无效了。
【解决方案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>

【讨论】:

  • 我认为您在此处链接的内容实际上是发布者所追求的内容,但为了避免自我宣传的感觉,最好在答案中提供一些示例来说明这将如何工作。
  • 感谢您的提醒,我已经添加了一个示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
相关资源
最近更新 更多