2016-08-22 35 views
0

我一直在測試中使用okhttp的模擬網絡服務器(https://github.com/square/okhttp/tree/master/mockwebserver),現在它工作得很好。從閱讀文檔和瀏覽谷歌,看起來圖書館是真正的測試目標。在生產中使用okhttp模擬網絡服務器

我的問題是,是否有任何理由不能在生產代碼中使用它?我有一個我正在開發的android應用程序,需要模擬web服務器。我已經整合了它,它工作正常,但我擔心我所做的事情是否有完全錯誤。

另外,在生產中使用模擬Web服務器時,我是否應該知道有任何安全風險?

謝謝!

回答

3

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服務器發出真正的呼叫。