簡體   English   中英

Mockito 在 when 方法中捕獲間諜對象的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM