首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Mockito模拟ExecutorService调用

如何使用Mockito模拟ExecutorService调用
EN

Stack Overflow用户
提问于 2020-10-21 14:45:04
回答 2查看 4.1K关注 0票数 2

我想使用Mockito来模拟下面的代码片段。

代码语言:javascript
运行
复制
Future<Optional<List<User>>> getUser =
       executorService.submit(() -> userRepository.findById(user.getUserId()));

我试过使用下面的代码,但它没有工作

代码语言:javascript
运行
复制
    @Mock
    private ExecutorService executorService;

    @Mock
    private userRepository userRepository;

    when(executorService.submit(() -> userRepository.findById(USER_ID)))
           .thenReturn(ConcurrentUtils.constantFuture(userList));

有人能给我一个解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-24 17:05:57

谢谢你的回答。我已经为这个场景找到了一个解决方案。

我们可以使用下面的代码片段来模拟executor服务调用。

代码语言:javascript
运行
复制
when(executorService.submit(any(Callable.class)))
      .thenReturn(ConcurrentUtils.constantFuture(userList()));

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

代码语言:javascript
运行
复制
when(executorService.submit(any(Callable.class)))
      .thenReturn(ConcurrentUtils.constantFuture(userList()),
           ConcurrentUtils.constantFuture(Optional.of(departmentList())));
票数 1
EN

Stack Overflow用户

发布于 2020-10-21 14:50:03

您不想篡改ExecutorService本身,而是模拟findById以获得结果。只要模拟立即返回结果(除非让它在Thread.sleep上停留一段时间),ExecutorService中的调用本身是快速的,因此结果被包装在Future中。

代码语言:javascript
运行
复制
Mockito.when(userRepository.findById(Mockito.any()).thenReturn(userList);

然后您就根本不需要模拟ExecutorService了,您想要使用真正的服务,否则它就不会做它应该做的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64466093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档