如何测试专用于返回当前时间的课程?

时间:2013-10-15 13:58:05

标签: java android junit

我有一个课程需要获得当前时间。当我开始为该类编写测试时,我将时间功能抽象为外部类,然后将其注入到原始类中,并在测试时进行模拟。这一切都很好,但现在我有一个我想测试的Clock类。我该如何测试这门课程?

import java.util.Date;

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

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

1 个答案:

答案 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()

返回