MockWebServer返回「模擬」(換句話說,「不真實」)數據。如果您在生產環境中使用了該類,則必須繼續向其提供虛假數據,或者通過某個單獨的庫或工具進行真正的HTTP調用,並將其響應填充到MockWebServer中。那麼,關鍵是什麼?爲什麼不直接讓OkHttp根據設計直接撥打電話?
我的猜測是你可能會誤解OkHttp3和MockWebServer之間的關係。
- OkHttp3 - HTTP客戶端,使得在任何HTTP棧的HTTP請求(默認情況下,使用提供的Android裝置HTTP網絡;無線網絡連接,電池等)
- MockWebServer - 僅在測試中用來提供對OkHttp HTTP客戶端進行硬編碼(不是真實的)HTTP響應,以便在測試期間不需要實時網絡連接,或始終如一地模擬各種網絡連接問題,如丟棄的連接,無效的HTTP響應,服務器錯誤等。
您應該只在應用程序代碼中使用OkHttp3。
在你的測試中只有,你有MockWebServer虛假迴應(或者如果你這樣配置截取)來測試你的應用對OkHttp3的調用。當你投入生產時,任何MockWebServer代碼都不應該被引用或者調用(因爲你把它全部放在test/androidTest源代碼目錄中,對嗎?),而且OkHttp3代碼會在互聯網上進行真正的HTTP調用,因爲MockWebServer贏得了不要在那裏攔截他們了。
基本上,如果您在build.gradle
以外的任何東西,而不是testCompile 'com.squareup.okhttp3:mockwebserver:x.x.x'
和/或androidTestCompile 'com.squareup.okhttp3:mockwebserver:x.x.x'
比你做錯了。主要的,真實的生產應用程序不需要模擬Web服務器,因爲它將通過互聯網向真實的Web服務器發出真正的呼叫。