Java 莫基托:如何模仿二传手的二传手?
假设我有这样一个代码:Java 莫基托:如何模仿二传手的二传手?,java,mockito,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()
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()
感谢您的帮助您可以侦听事件(获取名称)并覆盖返回值。例如:
private final First first = mock(First.class);
when(first.getFirst()).thenReturn("some_value");
您可以侦听事件(获取名称)并覆盖返回值。例如:
private final First first = mock(First.class);
when(first.getFirst()).thenReturn("some_value");
您不应该模拟方法输入。如果你想单元测试你的方法。您必须使用实际值调用该方法,否则您将无法真正测试其行为您不应模拟该方法的输入。如果你想单元测试你的方法。您必须使用实际值调用该方法,否则您将无法真正测试他的行为您希望首先模拟,并让getFirst返回mockFirst。看
一旦有了它,就可以在(mockFirst.geId())时存根,然后返回(“someString”)
就我个人而言,我会跳过deepstubs功能,按照Ole在评论中所说的做,让getFirst先返回mockFirst。看
一旦有了它,就可以在(mockFirst.geId())时存根,然后返回(“someString”)
就我个人而言,我会跳过deepstubs功能,按照Ole在评论中所说的去做看来嵌套的get比嵌套的set更重要。您可以通过执行以下操作来处理此问题:
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);
您可以根据需要将这些链接在一起,只要确保每次返回都返回模拟版本即可 看来嵌套的get比嵌套的set更重要。您可以通过执行以下操作来处理此问题:
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);
您可以根据需要将这些链接在一起,只要确保每次返回都返回模拟版本即可 那么gitId()
呢?进一步说,如果层次结构中有更多的内容,我会感到困惑,因为你把一些值
放在双引号中。我猜你的意思是任何期望的合适值。是的,没错。when()的返回类型必须与方法调用的返回类型匹配。gitId()的返回类型如何?进一步说,如果层次结构中有更多的内容,我会感到困惑,因为你把一些值
放在双引号中。我猜你的意思是任何期望的合适值。是的,没错。when()的返回类型必须与方法调用的返回类型匹配。实际上,Id
不是该方法的响应,而是输入。所以你的意思是我不需要先模拟和id
?我指的是输入。我修改了我的回答实际上,Id
不是这个方法的响应,而是输入。所以你的意思是我不需要先模拟和id
?我指的是输入。我修改了我的回答,而不是req.setFirst(first)
(因为req
是一个模拟,所以它不会做任何事情),你必须这样做Mockito.when(req.getFirst())。然后返回(first)
,而不是req.setFirst(first)
(因为req
是一个模拟,所以它不会做任何事情)您必须执行此操作Mockito.when(req.getFirst())。然后返回(first)