java - 测试需要长时间执行的方法

标签 java

假设我有这样的方法:

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/

相关文章:

java - 使用 google protocol buffers 传输 String 字符时,出现乱码

run()后执行的线程中的Java回调执行

java - 可以在 EJB 3.1 中覆盖 @ApplicationException 的继承吗?

java - 如何监控文件上传进度?

java - 无法在 linux 中的 tomcat 上运行 solr(404 未找到/solr)

java - 如何正确处理图形上下文——我需要最后尝试吗? (Java 1.7)

java - 为什么每次执行时 Diffie Hellman 公共(public)参数都相同?

java LinkedList删除给我不同的值

java - 如何计算javafx文本区域中的行数

java - 如何使用 Jackcess 从查询而不是从表中检索数据