junit - Mockito:模拟一个由一系列方法链组成的参数
问题描述
我正在为接受字符串的方法编写测试,但字符串值来自方法调用链。
// MyService myService = a wired global variable
public List<String> method() {
List<Message> messageList = myService.getMessages(UserCtx.currentUser().getUserInfo().getUserId());
// keep doing something else
}
UserCtx.currentUser().getUserInfo().getUserId() 返回一个字符串
这是我写的单元测试
myService = mock(MyService.class);
List<Message> dummyMessageList = new ArrayList<>();
when(myService.getMessages(anyString())).thenReturn(dummyMessageList);
List<String> result = myClass.method()
我希望 myService.getMessages 将直接返回 dummyMessageList ,但它会进入 UserCtx.currentUser().getUserInfo().getUserId() 并在中间失败,因为没有有效的用户上下文。
我可以在 when() 中放置类似 any() 或 anyString() 的东西来绕过模拟 UserCtx 吗?
还是我必须一一模拟链 UserCtx.currentUser().getUserInfo().getUserId() ?
解决方案
推荐阅读
- three.js - Three.js 改变顶点位置最高效的方法是什么?
- python - python:创建校验位函数
- sql-server - 如何在 SQL Graph 表中创建递归边?
- laravel - Laravel 的工作失败了,正在开发中
- python-3.x - GitHub Actions:如何在 Docker 操作中使用来自 GitHub 注册表的 Docker 映像?
- stata - 如何执行 Koyck 滞后变换
- smt - 为 CVC4 SMT 查询生成多个模型
- kubernetes - kubectl run - 如何将托管 shell 的所有 ENV 变量传递给 pod?
- python - Tkinter - 没有属性标签'get()'错误
- c# - 列表视图中的asp.net imagebutton访问