2016-08-22 84 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服务器发出真正的呼叫。