我怎样才能使JUnittesting等待?

我有一个JUnittesting,我想等待一段时间,同步。 我的JUnittesting看起来像这样:

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

我尝试了Thread.currentThread()。wait(),但它引发IllegalMonitorStateException(如预期)。 有一些技巧,或者我需要一个不同的显示器?

Thread.sleep(2000);如何Thread.sleep(2000); ? 🙂

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

如果您正在等待rest请求,例如通常可能会在5秒内返回,但是如果您在10秒内将您的请求恢复为5秒,您的testing将失败。

为了弥补这个JayWay有一个伟大的实用工具称为不平等这是完美的,以确保在你继续之前发生的具体情况。

它也有一个很好的stream利API

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

https://github.com/jayway/awaitility

你也可以像这里所说的那样使用CountDownLatch对象。