Mockito:如何模拟二传手的二传手?

时间:2018-01-26 18:13:18

标签: java mockito

假设我有一个这样的代码:

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()

感谢您的帮助

4 个答案:

答案 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);

您可以根据需要将这些链接在一起,只需确保每个返回都返回模拟版本。