Dim*_*ims 4 java junit datetime junit4
检查双精度值时,通常为比较函数提供精度(delta),例如asserEquals()
如何对日期时间值做同样的事情?假设我不想与微秒精度进行比较,但是希望检查一些不精确的时间。
如何做到这一点?
就我个人而言,我只是为此编写一个简单的Hamcrest风格Matcher ...
class CloseToDate extends BaseMatcher<Date> {
private Date closeTo;
private long deltaInMs;
public CloseToDate(Date closeTo, long deltaInMs) {
this.closeTo = closeTo;
this.deltaInMs = deltaInMs;
}
@Override
public boolean matches(Object arg0) {
if (!(arg0 instanceof Date)) {
return false;
}
Date date = (Date)arg0;
return Math.abs( date.getTime() - closeTo.getTime()) <= deltaInMs;
}
@Override
public void describeTo(Description arg0) {
arg0.appendText(String.format("Not more than %s ms from %s", deltaInMs, closeTo));
}
public static CloseToDate closeToDate(Date date, long deltaInMs) {
return new CloseToDate(date, deltaInMs);
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您可以使用静态导入来简单地编写...
assertThat( myDate, closeToDate( someDate, 1000 ) ); // for 1000ms tolerance
Run Code Online (Sandbox Code Playgroud)
...如果您问我,它的可读性很好。
如果您有日期,则可以使用内置错误。
assertEquals(date1.getTime(), date2.getTime(), 1);
Run Code Online (Sandbox Code Playgroud)
如果您有LocalDateTime,则可以比较截断的时间。
assertEquals(ldt1.truncatedTo(ChronoUnit.MILLI_SECONDS),
ldt2.truncatedTo(ChronoUnit.MILLI_SECONDS));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1103 次 |
最近记录: |