我有一个公共方法:
public class methodUnderTest() {
A();
B();
}
和两个私有方法:
private class A() {
...
okHttpClient.newCall(request).execute();
...
}
private class B() {
...
okHttpClient.newCall(request).execute();
...
}
我想测试方法methodUnderTest
,但不知道如何模拟okHttp调用。我嘲笑了第一个调用(来自A类)和他们的响应,但是将被来自B类的第二个调用所覆盖(例如,来自A类的调用的响应将是来自B类的响应核心)。
是否可以区分每个班级的电话?
//inside the test method [with pesudocode]:
// for class A
ResponseA = response.body({"id":"1"});
when(call.execute()).thenReturn(response1);
when(okkHttpClient.newCall(any(Request.class))).thenReturn(call);
// for class B
ResponseB = response.body({"type"="car"});
when(call.execute()).thenReturn(responseB);
when(okkHttpClient.newCall(any(Request.class))).thenReturn(call);
答案 0 :(得分:3)
您可以将thenReturn
链接到call.execute()
Response responseA = ;
Response responseB = ;
OkHttpClient okHttpClient = mock(OkHttpClient.class);
Call call = mock(Call.class);
when(call.execute()).thenReturn(responseA).thenReturn(responseB);
when(okHttpClient.newCall(any(Request.class))).thenReturn(call);
现在,模拟的呼叫应在第一次调用时返回responseA,而在其他调用时返回responseB。