使用junit测试两个连续的okhttp调用

时间:2018-10-16 09:16:34

标签: java junit mockito

我有一个公共方法:

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

1 个答案:

答案 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。