【发布时间】:2020-03-04 12:41:11
【问题描述】:
我想根据传递给 spy 对象 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
这不是完整的代码,但问题是,“何时”中的这个表达式就像被调用一样 - 我在调试器上看到有一个对 AbstractExecutorService::submit(Callable) 的调用,我从提交中得到 NullPointerException方法,因为有一个检查传递的参数是否为空。
也许这不是使用 mockito 的合适方法。我的问题是如何编写这样一个测试来检查哪个工人被传递给 ExecutorService 并调用真实方法或抛出异常。
【问题讨论】: