OkHttp MockWebServer с динамическими URL-адресами с использованием Retrofit

Мое приложение использует динамические URL-адреса для вызовов веб-служб (на Android). baseUrl установлен как пустой, и мы передаем Retrofit2 @Url параметры в сервисном интерфейсе:

public interface UserService {  
    @GET
    public Call<ResponseBody> profilePicture(@Url String url);
}

Мы заранее не знаем хост/домен, поэтому MockWebServer не может перехватывать запросы. Вызов для получения исходного списка динамических URL-адресов выполняется на разных экранах. Одна из идей состоит в том, чтобы создать новый вариант, предоставляющий локальный источник данных для используемых URL-адресов, что является моим запасным планом.

Мне любопытно, есть ли у MockWebServer какие-либо другие методы, помогающие тестировать такие случаи, и может быть ограничен тестовым кодом.


person Jaguar    schedule 12.04.2018    source источник


Ответы (2)


Вы могли бы использовать перехватчик OkHttp, чтобы переписать имя хоста и порт?

person Jesse Wilson    schedule 12.04.2018
comment
Не могли бы вы уточнить? Я ищу решение, ограниченное тестовым кодом. Чтобы использовать перехватчик, мне нужно было бы создать другой аромат, верно? - person Jaguar; 12.04.2018
comment
Вам нужно будет установить перехватчик только в тестах. Я не думаю, что вы сможете избежать этого. - person Jesse Wilson; 13.04.2018
comment
Спасибо! Я добавил еще один перехватчик с ароматом сборки. - person Jaguar; 14.04.2018

Я также столкнулся с такой же проблемой. Когда я использую MockWebserver в тестировании, мне нужно изменить базовый URL-адрес, чтобы настроить локальный хост и порт для имитации веб-сервера. Я попробовал это, он работает нормально.

private static final Interceptor mRequestInterceptor = new Interceptor() {
                @Override
                public okhttp3.Response intercept(Interceptor.Chain chain) throws IOException {
                    Request request = chain.request();
                    final InetSocketAddress address = new InetSocketAddress(InetAddress.getLocalHost(), 8080);

                    HttpUrl httpUrl = request.url().newBuilder().scheme("http://").host(address.getHostName()).port(8080)
                            .build();
                    request = request.newBuilder()
                            .url(httpUrl)
                            .build();

                    return chain.proceed(request);
                }
            };

После этого базовый URL изменится на «http://localhost:8080/"

person Rkreddy    schedule 02.06.2018