Прозрачный прокси для тестирования ответов сервера офлайн на Android

У меня есть подсистема приложений Android, управляемая данными. Добавление тестов, направленных на 100% охват. Используя OkHttp.

Как прозрачно перехватывать вызовы на мой сервер с макетными ответами?

Хотите провести тесты на основе сквозного, а также единичного тестирования. Например: установка типа сборки MockServer должна загружать приложение, которое будет отображать макетные ответы в эмуляторе.

Ответ 1

Вы заглянули в okhttp mockwebserver?

Я использую его для насмешливых ответов и проверки/показа запросов.

Если вы хотите использовать это со строкой, вы можете создать ресурс Android или константу java в gradle, а затем запустить сервер и соответственно установить путь.

Ответ 2

Для модульных тестов вы должны написать свой код таким образом, чтобы изолировать использование OkHttp. При этом вы можете издеваться над клиентом (используя что-то вроде Mockito) и вести себя так, как хотите. В конце концов, в unit test мы хотим протестировать только один фрагмент кода, а не любые его зависимости.

Что-то вроде этого в Java. Аналогично, шаблон работает в другом месте (например, Javascript)

public class ClassUnderTest {

    private final OkHttpClient client;

    public ClassUnderTest(OkHttpClient client) {
        this.client = client;
    }
    // Other code...
}

// In your tests
OkHttpClient mockClient = mock(OkHttpClient.class);
when(mockClient.newCall(any(Request.class)).thenThrow(...);
ClassUnderTest testClass = new ClassUnderTest(mockClient);

verify(mockClient).doSomething();

Для тестов интеграции mockwebserver выглядит наилучшим выбором (как уже отмечали другие).