我有一个课程需要获得当前时间。当我开始为该类编写测试时,我将时间功能抽象为外部类,然后将其注入到原始类中,并在测试时进行模拟。这一切都很好,但现在我有一个我想测试的Clock类。我该如何测试这门课程?
import java.util.Date;
public class Clock {
public long getCurrentTime() {
return new Date().getTime();
}
}
注意:目前它非常简单,但我打算在我继续测试时扩展它以包含更多时间方法。
答案 0 :(得分:1)
测试这个课程可能没有意义,但是如果你坚持,例如你是项目中唯一拥有0%课程的人 测试覆盖率;-)然后这里有一个解决方案:
public void testClock() throws InterupteExcdeption {
Clock testClock = new Clock();
long time1 = testClock.getCurrentTime();
Thread.sleep(1000);
long time2 = testClock.getCurrentTime();
assertTrue(time2 > time1);
}
public void testClock2() throws InterupteExcdeption {
Clock testClock = new Clock();
long time1 = testClock.getCurrentTime();
Thread.sleep(1000);
long time2 = testClock.getCurrentTime();
assertTrue(time2 - time1 > 800);
long time3 = testClock.getCurrentTime();
long time4 = testClock.getCurrentTime();
// expecting a value of 0, but make the test defensive, use 100ms
assertTrue(time4 - time3 < 100);
}
进一步说:你的时钟类应该实现一个IClock
接口,否则很难用模拟替换系统时钟用于测试用例。
IClock的想法是你可以设置一个MockClock,例如运行速度快十倍,或者你可以设置时间,然后由getCurrentTime()
返回