我怎样才能使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(); });
你也可以像这里所说的那样使用CountDownLatch
对象。