Java将一种方法在将来的1分钟内运行以进行测试

时间:2020-01-21 10:13:35

标签: java

我有一个java方法,我想以某种方式模拟系统时钟以进行测试,因此我可以让该方法返回1分钟后的结果。我现在确实想使用线程并阻塞一分钟的时间,所以想知道我是否可以假冒时间并假设已经过去了1分钟。

更具体地说,我有一种方法,每隔1分钟运行一次,我想测试一下是否在2分钟后调用了两次。

1 个答案:

答案 0 :(得分:0)

将代码重写为不直接使用System.currentTimeMillis()(或您正在使用的任何东西),而是可以注入自己的时间提供者。然后,您可以在测试中轻松模拟该提供程序

public class YourService {
    public YourService(Supplier<Long> timeSupplier) { // use it like e.g. new YourService(System::currentTimeMillis)
        // ...
    }
}

class TimeSupplierMock {
    private long time; // add getters and setter

    TimeSupplierMock(long time) {
        this.time = time;
    }
}


class MyTest {
    @Test
    public void test() {
        TimeSupplierMock mock = new TimeSupplierMock(0);
        YourService service = new YourService(mock);

        // ...

        mock.setTime(20); // increasing time

}
相关问题