如何用Awaitility验证等待期间指定方法未被调用?
使用Awaitility验证等待期间方法未被调用的正确方式
你当前的写法确实和Thread.sleep()没本质区别——只是单纯等待10秒后做一次断言,没有利用Awaitility的轮询验证能力。
正确的做法是把Mockito的never()验证逻辑放到Awaitility的untilAsserted()中,让它在等待周期内反复检查:
@Test void testThatSomeMethodWasntCalled() { await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> { verify(someClass, never()).someMethod(); }); }
这种写法会让Awaitility按照默认间隔(100ms)持续执行断言:
- 如果在任意一次轮询中发现
someMethod被调用,测试会立刻失败,不用等满10秒; - 只有等到超时时间结束,所有轮询的断言都通过,才会判定测试通过。
如果需要调整轮询频率,还可以自定义间隔:
@Test void testThatSomeMethodWasntCalled() { await().pollInterval(500, TimeUnit.MILLISECONDS) .atMost(10, TimeUnit.SECONDS) .untilAsserted(() -> { verify(someClass, never()).someMethod(); }); }
核心逻辑就是让Awaitility持续验证“方法从未被调用”这个条件,而不是只在等待结束后做一次性检查。
内容的提问来源于stack exchange,提问作者JDMDevelopement
相关产品推荐
相关产品推荐

