如何让 JUnit 测试等待?

2022-08-31 08:37:20

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

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

我试过了,但它抛出了一个非法的MonitorStateException(正如预期的那样)。Thread.currentThread().wait()

有没有一些技巧,或者我需要一个不同的显示器?


答案 1

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


答案 2

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

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

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

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

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

https://github.com/jayway/awaitility


推荐