假设我有一个这样的代码:
public response MyMethod(Request req)
{
String id = req.getFirst().geId();
}
我嘲笑了主要对象 req :Request reqMock = mock(Request.class);
然后我做了类似的事情:
First first = new First();
first.setId("1")
req.setFirst(first);
如何继续嘲笑成员,即getFirst()
然后geId()
感谢您的帮助
答案 0 :(得分:1)
您可以侦听事件(获取名称)并覆盖返回值。例如:
private final First first = mock(First.class);
when(first.getFirst()).thenReturn("some_value");
答案 1 :(得分:1)
你不应该模拟方法输入。如果你想对你的方法进行单元测试。您必须使用实际值调用该方法,否则您将无法真正测试其行为
答案 2 :(得分:0)
你想模拟First并让getFirst返回mockFirst。见https://static.javadoc.io/org.mockito/mockito-core/2.13.0/org/mockito/Mockito.html#RETURNS_DEEP_STUBS
一旦你有了那个,那么你可以存根(mockFirst.geId())。thenReturn(" someString");
就我个人而言,我跳过了deepstubs功能并做了Ole在评论中所说的话
答案 3 :(得分:0)
看起来嵌套的get比嵌套集更重要。您可以通过执行以下操作来处理此问题:
Contents mockContents = Mockito.mock(Contents.class);
Mockito.when(mockContents.geId()).thenReturn("string you want to return");
Response mockResponse = Mockito.mock(Response.class);
Mockito.when(mockResponse.getFirst()).thenReturn(mockContents);
您可以根据需要将这些链接在一起,只需确保每个返回都返回模拟版本。