retrofit-mock 無入侵式mock框架

導(dǎo)航

1、retrofit-mock用法
2、retrofit-mock編寫思路(aop)
3 、retrofit-mock的動態(tài)代理及注解
4、aspect 原理講解與注解語法

1、前言

retrofit作為網(wǎng)絡(luò)核心框架,作為基礎(chǔ)庫。
針對retrofit有很多封裝,并不會有很多機(jī)會,穩(wěn)定項目進(jìn)行二次封裝,添加mock代碼,這樣會造成程序的整體不穩(wěn)定,增加測試難度,通常如下:

var api = createMocker(service, retrofit) 

所以需要開發(fā)一款無入侵式mock工具,隨時掛載mock和卸載mock的框架

目前retrofit-mock框架功能

1、mock框架無入侵式注入,不需要修改原有網(wǎng)絡(luò)代碼
2、mock框架正式生產(chǎn)包,不會有效率影響
3、支持注解配置,不需要額外代碼,生產(chǎn)代碼與測試代碼一致
4、支持http,本地json,同時兼容適配retrofit2.5.0版本
問題反饋解答:
  • 1、mock庫在debug包生效,release包失效,想使用mock效果,請用debug包

  • 2、寫mock庫目的:生產(chǎn)包和測試包用同一份代碼,不需要額外修改

  • 3、mock在debug生效,release包失效原理:retrofit-mock庫是mock真正實現(xiàn)代碼,retrofit-mock-no-op庫是空實現(xiàn)。如果你希望release包生效,請引用retrofit-mock庫

2、retrofit-mock用法
  • 1、用法
/**
 * MOCK 有兩種寫法
 * mock http地址
 * mock 本地json數(shù)據(jù)
 */
public interface Api {

    @MOCK(value = "appversion/update.json",enable = true)
    @GET(Urls.UPDATE_INTERFACENAME)
    Observable<BaseDataBean<IsUpdateBean>> getUpdateInfo();

    @MOCK(value = "https://www.baidu.com", enable = false)
    @GET(Urls.UPDATE_INTERFACENAME)
    Observable<BaseDataBean<IsUpdateBean>> getUpdateInfo2();
}

如上兩種用法

enable 是當(dāng)前接口是否mock的開關(guān)

為了便于易用

//RetrofitMock 是mock的所有接口的總開關(guān)
RetrofitMock.setEnabled( true ); 
//針對于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' }
    }
}

引用aop插件

//引入插件
buildscript {
    dependencies {
        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'
    }
}
添加對應(yīng)依賴
apply plugin: 'android-aspectjx'

增加混淆

####retrofit-mock
-keep class retrofit2.** {*;}
-keep class com.chaoliu.mock.** {*;}
4、特別感謝

首先特別感謝javalong,給retrofit-mock提供了好的思路

本文代碼
https://github.com/yinlingchaoliu/retrofitMock

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容