用Hamcrest验证DateTime和日期

本文介绍了一种使用Hamcrest库简化Java中日期和时间验证的方法。通过使用Hamcrest的Matcher,可以更清晰地进行单元测试,特别是针对日期和时间的测试。文章提供了示例代码,展示了如何为Date、LocalDateTime和ZonedDateTime类型创建断言。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自从我开始涉足自动化测试和练习TDD以来,验证日期值很痛苦。 幸运的是,这里有一个不错的库,可用于遗留Date和新的Java 8 DateTime API ,从而解决了这一难题。

如果您属于Java开发社区中较健康的部分,并且每天练习单元测试,那么您可能知道Hamcrest Java库 。 它可以使您的测试更具可读性。 它的体系结构是非常模块化的,并由其他各种测试库使用。

Matcher的概念是灵活性的主要部分。 我现在不打算深入探讨这个概念。 如果您不熟悉,只需快速阅读Hamcrest教程 。 您可以插入测试工具箱中的匹配器之一是hamcrest-date库。 使用此库,我们可以轻松测试在特定范围内生成的日期:

@Test
public void validateDate() {
    //GIVEN
    Date expectedDate = new Date();
 
    //WHEN
    Date actualDate = new Date();
 
    //THEN
    assertThat(actualDate, DateMatchers.within(2, ChronoUnit.SECONDS, expectedDate));
}

对于Java 8类型,我们也可以这样做:

@Test
public void validateDateTime() {
    //GIVEN
    LocalDateTime expectedDateTime = LocalDateTime.now();
 
    //WHEN
    LocalDateTime actualDateTime = LocalDateTime.now();
 
    //THEN
    assertThat(actualDateTime, LocalDateTimeMatchers.within(2, ChronoUnit.SECONDS, expectedDateTime));
}

或选择hamcrest-core库提供的各种异国验证

@Test
public void validateZonedDateTime() {
    //GIVEN
    ZonedDateTime expectedDateTime = ZonedDateTime.of(2016, 3, 20, 13, 3, 0, 0, ZoneId.of("GMT+1"));
 
    //WHEN
    ZonedDateTime actualDateTime = ZonedDateTime.of(2016, 3, 20, 13, 3, 0, 0, ZoneId.of("GMT-0"));
 
    //THEN
    assertThat(actualDateTime, ZonedDateTimeMatchers.sameDay(expectedDateTime));
    assertThat(actualDateTime, ZonedDateTimeMatchers.after(expectedDateTime));
    assertThat(actualDateTime, ZonedDateTimeMatchers.isSunday());
    assertThat(actualDateTime, ZonedDateTimeMatchers.isMarch());
}

翻译自: https://www.javacodegeeks.com/2016/03/verifying-datetime-date-hamcrest.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值