![](/img/trans.png)
[英]Mockito spy - when calling inner class method not spying method in spy object
[英]Mockito capture value on spy object in when method
我想根據傳遞給間諜對象 ExecutorService 的值做一些事情。 我只想 .doCallRealMethod() 或拋出異常並測試我的邏輯是否正確。 我不知道如何用 mockito 做到這一點。 我有我的邏輯示例代碼:
public class TasksRunner {
@Autowired
private ExecutorService executorService;
public void runTasks(List<Task> tasks) {
for(Task task : task) {
Worker = new Worker(task);
try {
executorService.submit(worker);
} catch(RejectedExecutionException e) {
// logic
}
}
// logic
}
}
和測試代碼:
var executorService = spy(Executors.newFixedThreadPool(THREAD_POOL_SIZE));
when(executorService.submit(argThat(new ArgumentMatcher<Worker>() {
@Override
public boolean matches(Worker w) {
// logic
return w.isSomething();
}
}))).thenThrow(new RejectedExecutionException());
// logic
這不是完整的代碼,但問題是,“when”中的這個表達式就像被調用 - 我在調試器上看到有一個對 AbstractExecutorService::submit(Callable) 的調用,我從 submit 方法中得到 NullPointerException,因為檢查傳遞的參數是否為空。
也許這不是使用 mockito 的合適方法。 我的問題是如何編寫這樣一個測試來檢查哪個工作人員被傳遞給 ExecutorService 並調用真正的方法或拋出異常。
好的,我想通了。
它一定要是:
doThrow(new RejectedExecutionException()).when(executorService).submit(Matchers.<Worker>argThat(w -> w.isSomething()));
請注意 .submit() 不直接在 when() 子句中。 當它是時,它真的調用 ExecutorService 和它的超級 AbstractExecutorService,在那里拋出 NullPointerExceptions。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.