-1

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

import java.util.Date;

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

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

4

1 回答 1

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() 返回

于 2013-10-15T15:03:11.983 回答