java - 比较具有不同精度级别的 Date 对象

标签 java junit

我有一个 JUnit 测试失败,因为毫秒不同。在这种情况下,我不关心毫秒。如何更改断言的精度以忽略毫秒(或我希望设置的任何精度)?

我想通过的失败断言示例:

Date dateOne = new Date();
dateOne.setTime(61202516585000L);
Date dateTwo = new Date();
dateTwo.setTime(61202516585123L);
assertEquals(dateOne, dateTwo);

最佳答案

有一些库可以帮助解决这个问题:

Apache commons-lang

如果您有 Apache commons-lang在你的类路径中,你可以使用 DateUtils.truncate将日期截断到某个字段。

assertEquals(DateUtils.truncate(date1,Calendar.SECOND),
             DateUtils.truncate(date2,Calendar.SECOND));

有一个简写:

assertTrue(DateUtils.truncatedEquals(date1,date2,Calendar.SECOND));

请注意,12:00:00.001 和 11:59:00.999 会截断为不同的值,因此这可能并不理想。为此,有圆形:

assertEquals(DateUtils.round(date1,Calendar.SECOND),
             DateUtils.round(date2,Calendar.SECOND));

断言J

从版本 3.7.0 开始,AssertJ添加了 isCloseTo断言,如果您使用的是 Java 8 日期/时间 API。

LocalTime _07_10 = LocalTime.of(7, 10);
LocalTime _07_42 = LocalTime.of(7, 42);
assertThat(_07_10).isCloseTo(_07_42, within(1, ChronoUnit.HOURS));
assertThat(_07_10).isCloseTo(_07_42, within(32, ChronoUnit.MINUTES));

它也适用于传统的 Java 日期:

Date d1 = new Date();
Date d2 = new Date();
assertThat(d1).isCloseTo(d2, within(100, ChronoUnit.MILLIS).getValue());

关于java - 比较具有不同精度级别的 Date 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1671001/

相关文章:

java - 如何使用参数在 Java 中创建实例的方法?

java - 如何限制 jFormattedTextField

java - 嵌套集的 JPA Criteria 查询

java - 是否可以使用 Sikuli 进行 JUnit 测试并在失败时截取屏幕截图?

Java:如何对在方法范围内创建和操作文件的方法进行单元测试?

java - 测试 Spring Boot RestTemplate 客户端的 JSON 映射

java - eclipse中通过maven导入的java工程中如何解决依赖关系?

java - DialogFragment 上的自定义样式

junit - 如何在 TestNG 中使用 DbUnit

java - 如何在 EasyMock 中验证方法调用并忽略返回值?