mock-api

原理

基於 OkHttp 的 Interceptor : 如果目標url需要mock,則從本地(assets或sdcard)讀取數據,否則繼續向外發送請求。

使用

首先,在 build.gradle 中添加以下依賴:

compile 'com.shanbay.android:mock-api:0.0.1'

然後,準備mock數據,比如對於請求: /api/user/ 我們期望返回:

{
    username: "shanbay"
}

我們將上述內容保存爲 user.json ,然後放在assets目錄下的 mockdata/account/目錄中(這裏的account是suite-name,後面會介紹);

接着,創建Client,增加以下配置:

MockApiSuite suite = new MockApiSuite("account"); // account 表示 suite name
suite.addMockApi(new StandardMockApi(MockHttpMethod.GET, "/api/user/").setSuccessDataFile("user.json"))

MockApiInterceptor mockApiInterceptor = new MockApiInterceptor(context);
mockApiInterceptor.addMockApiSuite(suite);

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
    .addInterceptor(mockApiInterceptor)   // 注入mock api interceptor
    .addInterceptor(new UserAgentInterceptor(context));
    ....

這時候請求 /api/user/ ,你會發現返回了我們剛纔mock的數據 ;-)

更多

MockApiSuite

當我們mock很多api的時候,如果只是簡單聚合這些api,將會非常的凌亂&難以管理,所以我們建立了Suite的概念:把相同業務場景的api放到一個suite中(比如分爲account模塊、purchase模塊),這樣對於之後的更新、維護都非常方便。

StandardMockApi

StandardMockApi用來聲明一個需要mock的api,其中第一個參數表示需要mock的 HTTP Method(支持GET、POST、PUT、DELETE),第二個參數表示需要mock的url (支持正則) ;通過這兩個構造參數,我們基本上就定義出一個mock api的大體框架,之後我們可以通過:

  • setSuccessDataFile 設置api調用成功返回的數據結果;
  • setErrorDataFile 設置api調用失敗返回的數據結果;
  • setState 設置這次是模擬api調用成功還是失敗(默認模擬調用成功);
  • setRequestTime 設置api請求時間(可以用來模擬請求慢的情況);

Mock數據

  • 約定mock數據存放路徑: mockdata/[suite_name]/;
  • MockApiInterceptor的第二個構造參數用來指定:mock數據是放在sdcard根目錄,還是assets根目錄(默認);推薦把Mock數據存放在sdcard中,這樣我們可以通過adb命令動態修改mock數據(而不需要重啓App),提高開發效率;
發佈了65 篇原創文章 · 獲贊 26 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章