我有以下方法,该方法采用UNIX时间戳,并以天,小时或分钟为单位返回使用期限。我想用JUnit对其进行单元测试,但是由于当前时间不断变化,我不确定如何开始这样做。有什么建议吗?谢谢!
这是方法:
public static String getAge(long unixTime) throws Exception {
long diff = (System.currentTimeMillis() / 1000) - unixTime;
diff = diff / 60;
if (diff < 60) {
return Math.round(diff) + " m";
}
else
diff /= 60;
if (diff < 24) {
return Math.round(diff) + " h";
}
else {
diff /= 24;
return Math.round(diff) + " d";
}
}
答案 0 :(得分:0)
要么应该更改方法的设计以同时接受当前时间和 unixTime ,要么必须退出纯JUnit并使用PowerMock模拟 System.currentTimeMillis()返回所需的结果。
答案 1 :(得分:0)
我将根据当前时间在unitTest中构建一个unix时间戳。该方法的结果的粒度足够粗糙,以至于您创建参数和执行此方法之间的时间差只有几毫秒。当然,您需要避开边界条件,即60分钟和24小时的unixTime。
public void testMinutes() {
Instant minutesAgo = Instant.ofEpochMilli(System.currentTimeMillis() - 15 * 60 * 1000);
String result = getAge(minutesAgo.getEpochSecond());
assertSomething...
}
以此类推,进行了数小时和数天的测试。