OkHttp MockWebServer 使用 Retrofit 动态 URL

OkHttp MockWebServer with dynamic URLs using Retrofit

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

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

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

我很好奇MockWebServer是否有任何其他方法来帮助测试这种情况并且可以限制为测试代码。

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

我也遇到了同样的问题。当我在测试中使用 MockWebserver 时,我必须更改 base URL 以定位模拟 Web 服务器本地主机和端口。我试过了,它工作正常。

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/