假设我有这样的代码:
public response MyMethod(Request req)
{
String id = req.getFirst().geId();
}
我嘲笑了主要对象要求:Request reqMock = mock(Request.class);
然后我做了这样的事情:
First first = new First();
first.setId("1")
req.setFirst(first);
我如何继续嘲笑成员,即 getFirst()
然后geId()
感谢您的帮助
您可以侦听事件(获取名称(并覆盖返回值。例如:
private final First first = mock(First.class);
when(first.getFirst()).thenReturn("some_value");
你不应该模拟方法输入。如果要对方法进行单元测试。你必须调用具有实际值的方法,否则你不会真正测试他的行为
你想模拟 First,并让它 getFirst 返回 mockFirst。见 https://static.javadoc.io/org.mockito/mockito-core/2.13.0/org/mockito/Mockito.html#RETURNS_DEEP_STUBS
一旦你有了它,那么你就可以存根 when(mockFirst.geId(((.thenReturn("someString"(;
就个人而言,我会跳过深度存根功能并按照 Ole 在评论中所说的去做
似乎嵌套获取比嵌套集更像是您的问题。您可以通过执行以下操作来处理此问题:
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);
您可以根据需要将它们链接在一起,只需确保每个返回都返回模拟版本即可。