我正在执行仪器测试,因为我正在调用其中一个活动,该活动在创建活动时调用 2 个 API。
现在我想为此活动编写仪器测试用例,我必须使用以下命令来模拟 API 响应模拟Web服务器莫基托。当我调用一个 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;
}
}
任何帮助表示赞赏。提前致谢。
经过调查,我找到了解决方案。因此回答我的问题。
- 调度程序有助于添加超过 1 个模拟响应
- 空闲资源和等待库将有助于避免添加
睡眠时间,即 SystemClock.sleep(4000)。
有关更多详细信息,以下博客可能会有所帮助:
https://blog.kiprosh.com/how-to-test-api-response-with-mockwebserver-library/ https://blog.kiprosh.com/how-to-test-api-response-with-mockwebserver-library/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)