我正在执行仪器测试,因为我正在调用其中一个在创建活动时调用 2 个 API 的活动。
现在我想为此活动编写仪器测试用例,我必须使用 mockito 的mockWebServer来模拟 API 响应。当我调用一个 API 时,我的模拟代码可以正常工作,但是当同时调用两个 API 时它会失败。
即使有另一种情况,假设我们有 API 来获取最近的消息数据,但在此之前,我们总是通过发送刷新令牌 来验证用户。在这种情况下,我们需要调用对用户进行身份验证的 API,然后调用另一个 API 来获取消息数据。因此,我们需要一个接一个地调用 2 个 API,比如说在一个方法中。在编写该单一方法的测试用例时,我将如何模拟身份验证 API 响应和消息 API 响应?
我应该如何处理这个问题?有没有其他方法来处理我们需要同时调用多个 API 的情况?
此外,我已经使用SystemClock.sleep(4000);
了我的回调异步执行。
下面是我模拟 API 的代码:
public class MyAPIActivityTest {
@Rule
public InstantTaskExecutorRule mInstantTaskExecutorRule = new InstantTaskExecutorRule();
@Rule
public ActivityTestRule<MyAPIActivity> myAPIActivityTestRule = new ActivityTestRule<>(MyAPIActivity.class, true, false);
MockWebServer mockWebServer;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void checkVisibilityOfTaskListMockedValidData() throws Exception {
myAPIActivityTestRule.launchActivity(null);
String fileName = "json_files/valid_api_response.json";
mockWebServer = new MockWebServer();
int PORT_NUMBER = 50205;
mockWebServer.start(PORT_NUMBER);
ApiUrls.BASE_QUERY_URL = mockWebServer.url("/").toString();
mockWebServer.enqueue(new MockResponse()
.setBody(getStringFromFile(getContext(), fileName)));
SystemClock.sleep(4000);
Assert.assertEquals(View.VISIBLE, myAPIActivityTestRule.IvDataIsPresent.getVisibility());
Assert.assertEquals(View.GONE, myAPIActivityTestRule.IvDataNotPresent.getVisibility());
}
@After
public void tearDown() throws Exception {
mockWebServer.shutdown();
}
public static String convertStreamToString(InputStream inputStream) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line).append(StringCharacters.NEW_LINE);
}
reader.close();
return stringBuilder.toString();
}
public static String getStringFromFile(Context context, String filePath) throws Exception {
final InputStream stream = context.getResources().getAssets().open(filePath);
String text = convertStreamToString(stream);
stream.close();
return text;
}
}
任何帮助表示赞赏。提前致谢。