项目作者: yinlingchaoliu

项目描述 :
retrofit Mock 无入侵式接入mock数据 已适配retrofit2.5.0
高级语言: Java
项目地址: git://github.com/yinlingchaoliu/retrofitMock.git
创建时间: 2019-03-19T09:12:20Z
项目社区:https://github.com/yinlingchaoliu/retrofitMock

开源协议:

下载


导航

1、retrofit-mock用法

2、retrofit-mock编写思路(aop)

3 、retrofit-mock的动态代理及注解

4、aspect 原理讲解与注解语法

1、前言

retrofit作为网络核心框架,作为基础库。针对retrofit有很多封装,并不会有很多机会,稳定项目进行二次封装,添加mock代码,这样会造成程序的整体不稳定,增加测试难度,通常如下:

  1. var api = createMocker(service, retrofit)

所以需要开发一款无入侵式mock工具,随时挂载mock和卸载mock的框架

目前retrofit-mock框架功能

  1. 1mock框架无入侵式注入,不需要修改原有网络代码
  2. 2mock框架正式生产包,不会有效率影响
  3. 3、支持注解配置,不需要额外代码,生产代码与测试代码一致
  4. 4、支持http,本地json,同时兼容适配retrofit2.5.0版本
2、retrofit-mock用法
  • 1、用法
  1. /**
  2. * MOCK 有两种写法
  3. * mock http地址
  4. * mock 本地json数据
  5. */
  6. public interface Api {
  7. @MOCK(value = "appversion/update.json",enable = true)
  8. @GET(Urls.UPDATE_INTERFACENAME)
  9. Observable<BaseDataBean<IsUpdateBean>> getUpdateInfo();
  10. @MOCK(value = "https://www.baidu.com", enable = false)
  11. @GET(Urls.UPDATE_INTERFACENAME)
  12. Observable<BaseDataBean<IsUpdateBean>> getUpdateInfo2();
  13. }

如上两种用法
enable 是当前接口是否mock的开关

为了便于易用

  1. //RetrofitMock 是mock的所有接口的总开关
  2. RetrofitMock.setEnabled( true );
  3. //针对于debugRelease
  • 2、retrofit-mock的依赖
    ```
    dependencies{
    debugImplementation ‘com.github.yinlingchaoliu:retrofit-mock:1.0.1’
    releaseImplementation ‘com.github.yinlingchaoliu:retrofit-mock-no-op:1.0.1’
    }

//aop开启
aspectjx {
enabled true
}

allprojects {
repositories {
maven { url ‘https://www.jitpack.io‘ }
}
}

  1. 引用aop插件

//引入插件
buildscript {
dependencies {
classpath ‘com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4’
}
}
添加对应依赖
apply plugin: ‘android-aspectjx’

  1. 增加混淆

retrofit-mock

-keep class retrofit2. {*;}
-keep class com.chaoliu.mock.
{*;}

  1. ##### 3、特别优化
  2. 一般生产发版需求,
  3. 1、不需要mock
  4. 2、不希望修改代码
  5. 3、不希望mock反射降低效率
  6. 4、不希望引入不需要的库
  7. 可以关闭aop,引入生产库即可

//引入生产库
releaseImplementation ‘com.github.yinlingchaoliu:retrofit-mock-no-op:1.0.1’

aspectjx {
enabled false
}
```

4、特别感谢

首先特别感谢javalong,给retrofit-mock提供了好的思路

本文代码

https://github.com/yinlingchaoliu/retrofitMock