如何使用 MockWebServer Android 测试用例模拟两个 API

2024-01-13

我正在执行仪器测试,因为我正在调用其中一个活动,该活动在创建活动时调用 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. 调度程序有助于添加超过 1 个模拟响应
  2. 空闲资源和等待库将有助于避免添加 睡眠时间,即 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(使用前将#替换为@)

如何使用 MockWebServer Android 测试用例模拟两个 API 的相关文章