如何让 JUnit 测试等待?

新手上路,请多包涵

我有一个 JUnit 测试,我想同步等待一段时间。我的 JUnit 测试如下所示:

 @Test
public void testExipres(){
    SomeCacheObject sco = new SomeCacheObject();
    sco.putWithExipration("foo", 1000);
    // WAIT FOR 2 SECONDS
    assertNull(sco.getIfNotExipred("foo"));
}

我尝试 Thread.currentThread().wait() ,但它抛出了 IllegalMonitorStateException (如预期的那样)。

有什么技巧吗,还是我需要不同的显示器?

原文由 Kylar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 601
2 个回答

Thread.sleep(2000); 怎么样? :)

原文由 Muel 发布,翻译遵循 CC BY-SA 3.0 许可协议

Thread.sleep() 在大多数情况下都可以工作,但通常如果你在等待,你实际上是在等待特定条件或状态的发生。 Thread.sleep() 不保证您正在等待的任何事情都已经发生。

例如,如果您正在等待休息请求,它通常会在 5 秒内返回,但如果您将睡眠时间设置为 5 秒,您的请求在 10 秒后返回,您的测试将失败。

为了解决这个问题,JayWay 有一个名为 Awatility 的强大实用程序,它非常适合确保在您继续前进之前发生特定情况。

它也有一个很好的流畅的api

 await().until(() ->
{
    return yourConditionIsMet();
});

https://github.com/jayway/awaitility

原文由 Ben Glasser 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题