首页 > 解决方案 > 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() ?

标签: junitmockitopowermockito

解决方案


推荐阅读