Hamcrest库用于日期的匹配

5

我一直在寻找相关资料,但是没有发现有用的东西。是否有第三方库与Hamcrest配合使用,并具有广泛的日期匹配功能?

具体来说,我正在寻找以下类型的匹配器:

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

我想在开始自己的项目之前看看是否有现成的解决方案。


3
也许你应该看一下Yoda Time,使用这个库来实现这些匹配器应该很容易。 - Absurd-Mind
6
那是Joda Time的绝地武士分支吗? - David Harkness
2个回答

3
我写了一组日期匹配器,看起来符合你想要的。源代码在这里:https://github.com/eXparity/hamcrest-date。以下是使用within匹配器的示例。
assertThat(dateUnderTest, DateMatchers.within(2, TimeUnit.SECONDS, new Date()));

您可以通过在pom.xml文件中添加以下内容来使用Maven添加它:

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

我认为你在这里提供的链接实际上是海报所需要的,但为了避免自我推销的感觉,最好在回答中提供一些示例来说明这将如何工作。 - EdC
谢谢提醒,我已经添加了一个例子。 - stewbis

0

你应该尝试使用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]
}

带有日期的完整示例在这里,其他的在那里


两个链接现在都无效。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接