我的应用使用动态网址进行网络服务调用(在Android上)。 baseUrl设置为空,我们在服务接口中传递Retrofit2 @Url个参数:
public interface UserService {
@GET
public Call<ResponseBody> profilePicture(@Url String url);
}
我们事先并不知道主机/域,因此MockWebServer无法拦截请求。获取动态URL初始列表的调用是在不同的屏幕中进行的。一个想法是创建一个新的风格,为要使用的URL提供本地数据源,这是我的后备计划。
我很好奇,如果MockWebServer有任何其他方法可以帮助测试这些情况,可以限于测试代码。
答案 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;