Android网络接口测试模拟响应

2017-10-26  本文已影响0人  SunYo

最近看了一个MockNet库,作者介绍它是为了方便客户端网络接口的开发和测试,简单来说就是在本地启动服务器用来响应客户端的网络请求。


平时写项目的时候,总会遇到这些情况:

Mocknet库的解决方案:


然而集成到同学会的过程中一直失败,无法集成,如果要实现类似的功能只能自己实现,只需拦截网络请求不等待网络回调而返回我们自己预先设定的结果即可。
由于同学会安卓使用的是Okhttp+retrofit网络框架,所以在OkHttpClient初始化时注册一个拦截器,我们在配置文件中配置要拦截的Api地址和返回json串,然后在拦截器中对网络请求地址进行判断,如果是要拦截的api就返回指定结果。
代码片段:

    //模拟响应拦截器
    private class simulateResponse implements Interceptor {

        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            final HttpUrl url = request.url();//获取路径
            //判断是否需要拦截
            String apiNname = NetApiInterceptorList.isExist(url.toString());
            if(null != apiNname){
                String responseContent = NetApiInterceptorList.getVisualResponseByApi(apiNname);
                return new Response.Builder()
                        .code(200)
                        .message("模拟响应")
                        .body(ResponseBody.create(MediaType.parse("UTF-8"),responseContent))
                        .request(request)
                        .protocol(HTTP_1_1)
                        .build();
            }
            return chain.proceed(request);
        }
    }
//OkHttpClient初始化时注册上述拦截器
OkHttpClient.Builder().addInterceptor(new simulateResponse());

//需要拦截api及返回结果配置类
public class NetApiInterceptorList {
    private static HashMap<String, String> apiResponse = new HashMap<>();

    public static String isExist(String apiName){
        for(String interceptApi : apiResponse.keySet()){
            if(apiName.startsWith(interceptApi)){
                return interceptApi;
            }
        }
        return null;
    }

    public static String getVisualResponseByApi(String apiName){
        return apiResponse.get(apiName);
    }

    public static void init(){
        if(apiResponse.size() > 0){
            return;
        }
        apiResponse.put(CMUApi.GET_MESSAGE, "{\"result\":\"000000\",\"msg\":\"调用成功\",\"data\":{\"userid\":\"TY6XFGLSUICQ2\",\"empno\":\"Y6XFGLSUICQ2\",\"userName\":\"18938856298\",\"sex\":\"未知\",\"status\":\"普通群员\",\"idType\":\"身份证\",\"empIdNo\":\"不详\",\"mobileNo\":\"18938856298\",\"homeAddr\":null,\"claimBankNo\":null,\"accountNo\":null,\"wechat\":\"微信\",\"occupation\":null,\"nickname\":\"昵称\"}}");
        apiResponse.put(CMUApi.ABOUT_MONEY, "{\"result\":\"000000\",\"msg\":\"调用成功\",\"data\":{\"userid\":\"TY6XFGLSUICQ2\",\"empno\":\"Y6XFGLSUICQ2\",\"userName\":\"18938856298\",\"sex\":\"未知\",\"status\":\"普通群员\",\"idType\":\"身份证\",\"empIdNo\":\"不详\",\"mobileNo\":\"18938856298\",\"homeAddr\":null,\"claimBankNo\":null,\"accountNo\":null,\"wechat\":\"微信\",\"occupation\":null,\"nickname\":\"昵称\"}}");
    }
上一篇 下一篇

猜你喜欢

热点阅读