Java 如何测试某个异步进程的结果?

Java 如何测试某个异步进程的结果?,java,testing,asynchronous,junit,Java,Testing,Asynchronous,Junit,我正在测试一个封装石英调度程序对象的组件 我的问题是Quartz在内部进行一些异步处理,我无法在测试代码中编写如下内容: Mockito.when(configurationMock.getId()).thenReturn(CONFIG_ID); target.addJob(configurationMock); Scheduler sched = (Scheduler) Whitebox.getInternalState(target, "scheduler");

我正在测试一个封装石英
调度程序
对象的组件

我的问题是Quartz在内部进行一些异步处理,我无法在测试代码中编写如下内容:

    Mockito.when(configurationMock.getId()).thenReturn(CONFIG_ID);
    target.addJob(configurationMock);
    Scheduler sched = (Scheduler) Whitebox.getInternalState(target, "scheduler");
    assertTrue(sched.checkExists(new JobKey(configurationMock.getId())));
因为当我检查工作是否存在时,它可能还不存在


我检查了JUnitAPI,但是没有
assertWithTimeout()
之类的东西。我错过了什么吗?

我通常使用倒计时锁存器,但它需要某种形式的回调方法,比如:

CountDownLatch done = new CountDownLatch(1);
target.onJobComplete(new Runnable() { public void run() {
    done.countdown();
}});
Scheduler sched = (Scheduler) Whitebox.getInternalState(target, "scheduler");
done.await(timeout);
如果您没有回调或检查任务是否已安排的方法,您只需等待:

target.addJob(configurationMock);
Scheduler sched = (Scheduler) Whitebox.getInternalState(target, "scheduler");

//wait up to 1 second
for (int i = 0; i < 100; i++) {
    if (!sched.checkExists(new JobKey(configurationMock.getId()))) Thread.sleep(10);
    else break;
}

assertTrue(sched.checkExists(new JobKey(configurationMock.getId())));
target.addJob(configurationMock);
调度器sched=(调度器)Whitebox.getInternalState(目标,“调度器”);
//最多等待1秒钟
对于(int i=0;i<100;i++){
如果(!sched.check)存在(新的JobKey(configurationMock.getId()))Thread.sleep(10);
否则就断了;
}
assertTrue(sched.checkExists(新作业键(configurationMock.getId()));