Как смоделировать два API с помощью тестовых случаев Android MockWebServer - PullRequest
0 голосов
/ 13 октября 2019

Я выполняю инструментальное тестирование, в котором я вызываю одно из действий, которое вызывает 2 API-интерфейса при создании действия.

Теперь я хочу написать контрольные примеры для этого действия, где я должен макетироватьответ API с mockWebServer из mockito. Мой фиктивный код работает нормально, когда я вызываю один 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;
}
}

Любая помощь приветствуется. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...