4

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

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

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

我很好奇 MockWebServer 是否有任何其他方法可以帮助测试此类案例并且可以仅限于测试代码。

4

2 回答 2

2

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

于 2018-04-12T03:46:34.177 回答
0

我也面临着同样的问题。当我在测试中使用 MockWebserver 时,我必须更改基本 URL 以定位模拟 Web 服务器 localhost 和端口。我试过这个它工作正常。

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/ ”之后

于 2018-06-02T08:37:03.273 回答