我有一个junit测试失败,因为毫秒不同。在这种情况下,我不关心毫秒。如何将assert的精度更改为忽略毫秒(或我希望它设置为的任何精度)?我想通过的失败Assert示例:
Date dateOne = new Date(); dateOne.setTime(61202516585000L); Date dateTwo = new Date(); dateTwo.setTime(61202516585123L); assertEquals(dateOne, dateTwo);
rks48beu16#
我不知道junit中是否有支持,但有一种方法可以做到:
import java.text.SimpleDateFormat; import java.util.Date; public class Example { private static SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss"); private static boolean assertEqualDates(Date date1, Date date2) { String d1 = formatter.format(date1); String d2 = formatter.format(date2); return d1.equals(d2); } public static void main(String[] args) { Date date1 = new Date(); Date date2 = new Date(); if (assertEqualDates(date1,date2)) { System.out.println("true!"); } } }
fruv7luv17#
这是一个实用函数,它为我完成了这项工作。
private boolean isEqual(Date d1, Date d2){ return d1.toLocalDate().equals(d2.toLocalDate()); }
piwo6bdm18#
像这样的方法可能有用:
assertEquals(new SimpleDateFormat("dd MMM yyyy").format(dateOne), new SimpleDateFormat("dd MMM yyyy").format(dateTwo));
nwwlzxa719#
有一些库对此有所帮助:apache commons语言如果类路径上有apachecommons lang,那么可以使用 DateUtils.truncate 将日期截断到某个字段。
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));
资产从版本3.7.0开始,assertj添加了 isCloseTo Assert,如果您使用的是java8日期/时间api。
isCloseTo
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());
19条答案
按热度按时间rks48beu16#
我不知道junit中是否有支持,但有一种方法可以做到:
fruv7luv17#
这是一个实用函数,它为我完成了这项工作。
piwo6bdm18#
像这样的方法可能有用:
nwwlzxa719#
有一些库对此有所帮助:
apache commons语言
如果类路径上有apachecommons lang,那么可以使用
DateUtils.truncate
将日期截断到某个字段。这里有一个速记:
请注意,12:00:00.001和11:59:00.999将截断为不同的值,因此这可能并不理想。为此,有一个圆:
资产
从版本3.7.0开始,assertj添加了
isCloseTo
Assert,如果您使用的是java8日期/时间api。它也适用于传统的java日期: