2014-02-11 4 views
2

Quartz Scheduler 개체를 래핑하는 구성 요소를 테스트하고 있습니다. 그것이 가능하기 때문에 내가 작업의 존재를 확인할 때일부 비동기 프로세스의 결과를 테스트하려면 어떻게해야합니까?

Mockito.when(configurationMock.getId()).thenReturn(CONFIG_ID); 
    target.addJob(configurationMock); 
    Scheduler sched = (Scheduler) Whitebox.getInternalState(target, "scheduler"); 
    assertTrue(sched.checkExists(new JobKey(configurationMock.getId()))); 

그것이 아니라고 :

내 문제는 석영은 내부적으로 약간의 비동기 처리를하고 나는 이런 내 테스트 코드 뭔가를 쓸 수 있다는 것입니다 아직 거기.

JUnit API를 확인했지만 assertWithTimeout() 또는 이와 비슷한 것이 없습니다. 내가 뭐 놓친 거 없니?

답변

2

내가 일반적으로 해, CountDownLatch를 사용 -하지만, 뭔가를 콜백 메소드의 형태가 필요합니다

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()))); 
관련 문제