如何测试专用于返回当前时间的类



我有一个需要获取当前时间的类。当我开始为该类编写测试时,我将时间功能抽象到外部类中,然后将其注入到原始类中,并且可以在测试时进行模拟。这一切都工作正常,但现在我有一个我想测试的时钟类。如何测试此类?

import java.util.Date;
public class Clock {
    public long getCurrentTime() {
        return new Date().getTime();
    }
}

注意:目前非常简单,但我打算在继续测试时扩展它以包含更多时间方法。

测试这个类可能没有意义,但如果你坚持,例如,如果你是项目中唯一一个类为 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的想法是,你可以设置一个模拟时钟,例如运行速度快十倍,或者你可以设置时间,然后由getCurrentTime()返回。

最新更新