如何在单元测试中忽略 TimeUnit.SECONDS.sleep

How to ignore TimeUnit.SECONDS.sleep in unit tests

我有一个调用 30 秒睡眠的方法,但我不希望我的单元测试具有相同的时间。我希望我的单元测试忽略睡眠并执行方法上的其余部分或将睡眠时间减少到 1 秒。

public runwithSleep(){
 System.out.println("Before Sleep Time");
 TimeUnit.SECONDS.sleep(30);
 System.out.println("After Sleep Time");
}

从上面的示例代码中,如何在执行此方法的单元测试时忽略TimeUnit.SECONDS.sleep(30)。基本上我想测试一下我是否可以从一个条件达到这个方法所以我不想在测试中睡觉。

  1. 将您的业务逻辑提取到单独的方法中并在之后调用它 从你原来的方法睡觉。这样在你的单元测试中你可以 只需测试不包括睡眠的提取方法。
  2. 将睡眠值作为参数而不是硬编码值,在您的测试中,您可以将其设置为较小的值,而对于常规运行时,将其设置为 30 秒。

为了补充@Michael Gantman 之前的回答,目前在上面:

  1. 将对睡眠方法的依赖替换为对您将注入的 Sleeper 对象的依赖。在单元测试中,您将注入一个不等待的 Sleeper。奖励:测试可以询问 Sleeper 以检查它是否被调用,以及使用哪个参数。