如何使用 Mockito 模拟 ExecutorService 调用

slk*_*han 3 java multithreading unit-testing executorservice mockito

我想使用 Mockito 模拟以下代码片段。

Future<Optional<List<User>>> getUser =
       executorService.submit(() -> userRepository.findById(user.getUserId()));

Run Code Online (Sandbox Code Playgroud)

我尝试过以下代码,但没有成功

    @Mock
    private ExecutorService executorService;

    @Mock
    private userRepository userRepository;

    when(executorService.submit(() -> userRepository.findById(USER_ID)))
           .thenReturn(ConcurrentUtils.constantFuture(userList));
Run Code Online (Sandbox Code Playgroud)

谁能给我解决这个问题吗?

slk*_*han 5

感谢您的回答。我已经找到了针对这种情况的解决方案。

我们可以使用以下代码片段来模拟执行程序服务调用。

when(executorService.submit(any(Callable.class)))
      .thenReturn(ConcurrentUtils.constantFuture(userList()));
Run Code Online (Sandbox Code Playgroud)

如果您的方法调用中有多个ExecutorService 调用,您可以通过将它们作为逗号分隔列表添加到 Mockito 调用中来模拟每个响应,如下所示。

when(executorService.submit(any(Callable.class)))
      .thenReturn(ConcurrentUtils.constantFuture(userList()),
           ConcurrentUtils.constantFuture(Optional.of(departmentList())));
Run Code Online (Sandbox Code Playgroud)