Локальные тесты Android против инструментального тестирования

Я пытаюсь проверить, доступен ли мой API в модульном тесте, чтобы убедиться, что он отвечает 200.

Теперь моя проблема в том, что я не совсем уверен, когда использовать Локальный тест, а когда мне нужно использовать Android Instrumentation Tests. Я знаю, что мне нужно использовать инструментальные тесты для тестирования пользовательского интерфейса, но как проверить конечную точку?

Для связи использую Retrofit2. И попытался протестировать Endpoint двумя способами с помощью локальных тестов.

Пример 1 (синхронный, не работает)

public class EndpointTest {

    EndpointApi api;
    SimpleInjection simpleInjection;

    @Before
    public void setUp() {
        simpleInjection = new SimpleInjection();
        api = simpleInjection.getEndpointApi();
    }

    @Test
    public void endpoint_1_isAvailable() {
        Call<ApiResponse> rootCall = api.getRoot();
        try {
            int reponseCode = rootCall.execute().code();
            Assert.assertEquals(200, reponseCode);

        } catch (IOException e) {
            Assert.fail();
        }
    }         
}

Пример 2 (асинхронный, работает)

public class EndpointTest {

    EndpointApi api;
    SimpleInjection simpleInjection;

    @Before
    public void setUp() {
        simpleInjection = new SimpleInjection();
        api = simpleInjection.getEndpointApi();
    }

    @Test
    public void endpoint_2_isAvailable() {
    Call<ApiResponse> rootCall = api.getRoot();

        rootCall.enqueue(new Callback<ApiResponse>() {
            @Override
            public void onResponse(Call<ApiResponse> call, Response<ApiResponse> response) {
                Assert.assertEquals(200, response.code());
            }

            @Override
            public void onFailure(Call<ApiResponse> call, Throwable t) {
                Assert.fail();
            }
        });
    }         
}

Должен ли я использовать Android Instrumentation Test для асинхронного режима?


person shadox    schedule 03.03.2016    source источник
comment
у вас смешаны синхронные и асинхронные заголовки, из примера кода 1 выглядит синхронно, в то время как пример 2 выглядит асинхронно   -  person Bhargav    schedule 03.03.2016
comment
Да, это правда. Уже поправили. Спасибо   -  person shadox    schedule 03.03.2016


Ответы (1)


Решение о том, запускать ли тесты на локальной JVM на вашей машине разработки или на устройстве / эмуляторе Android, не зависит от того, является ли ваш код синхронным или нет. Обычно вам нужно запускать модульные тесты только локально, так как это намного быстрее и позволяет использовать TDD. Ваши тесты выполняют сетевые запросы, поэтому они, скажем, не модульные тесты, поскольку они зависят от сервера - это интеграционные тесты. Желательно запускать интеграционные тесты на устройстве Android, чтобы получить лучшую обратную связь.

person Egor    schedule 03.03.2016