假设我有这样的方法:
public int toTest() {
try { Thread.sleep(60 * 1_000); }
catch (InterruptedException ignored) {}
return 8;
}
我想测试一下,例如检查返回值是否正确,如下所示:
@Test
public void test() {
int actual = toTest();
assertThat(actual).isEqualTo(8);
}
有什么方法可以“模拟”时间流逝,以便在测试执行期间我不会被迫等待整分钟?
编辑: 可能我把我的问题描述得太具体了。我不想专注于这一分钟,而是想绕过它。甚至可能有 100 天,但我的问题是是否有方法来模拟这个时间流逝。
就像在项目 react 器方法中使用虚拟时间 https://projectreactor.io/docs/test/snapshot/api/reactor/test/StepVerifier.html#withVirtualTime-java.util.function.Supplier-
最佳答案
您可以使用 Powermock 来实现这一点。
// This will mock sleep method
PowerMock.mockStatic(Thread.class, methods(Thread.class, "sleep"));
PowerMockito.doThrow(new InterruptedException()).when(Thread.class);
Thread.sleep(Mockito.anyLong());
在类(class)开始时,您需要添加此内容
@PrepareForTest(YourClassToWhich_ToTest_MethodBelong.class)
关于java - 测试需要长时间执行的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49278486/