OkHttp MockWebServer,带有使用Retrofit的动态URL

时间:2018-04-12 02:37:15

标签: android retrofit retrofit2 okhttp mockwebserver

我的应用使用动态网址进行网络服务调用(在Android上)。 baseUrl设置为空,我们在服务接口中传递Retrofit2 @Url个参数:

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

我们事先并不知道主机/域,因此MockWebServer无法拦截请求。获取动态URL初始列表的调用是在不同的屏幕中进行的。一个想法是创建一个新的风格,为要使用的URL提供本地数据源,这是我的后备计划。

我很好奇,如果MockWebServer有任何其他方法可以帮助测试这些情况,可以限于测试代码。

2 个答案:

答案 0 :(得分:1)

您可以使用OkHttp拦截器重写主机名和端口吗?

答案 1 :(得分:0)

我也面临同样的问题。当我在测试中使用MockWebserver时,我必须将基本URL更改为目标模拟Web服务器localhost和port。我试过这个工作正常。

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);
                }
            };

此基本网址更改为&#34; http://localhost:8080/&#34;