在生产中使用okhttp模拟Web服务器

Jon*_*Jon 0 webserver android okhttp3

我已经在测试中使用okhttp的模拟Web服务器(https://github.com/square/okhttp/tree/master/mockwebserver)进行了相当多的测试,并且效果很好。从阅读文档和浏览Google来看,该库似乎确实是测试的目标。

我的问题是,是否有任何原因导致我不能在生产代码中使用它?我有一个正在使用的android应用程序,需要模拟Web服务器。我已经对其进行了集成,并且运行良好,但是我担心自己的操作是否存在某些问题。

另外,在生产中使用模拟Web服务器时,是否应注意任何安全风险?

谢谢!

Jon*_*ams 5

MockWebServer返回“模拟”(换句话说,“不是真实的”)数据。如果您在生产中使用了该类,则必须继续向其提供伪数据,或者通过一些单独的库或工具进行真正的HTTP调用,并将其响应填充到MockWebServer中。然后,重点是什么?为什么不让OkHttp直接按设计进行调用呢?

我的猜测是您可能会误解OkHttp3和MockWebServer之间的关系。

  • OkHttp3-HTTP客户端,可通过任何HTTP堆栈发出HTTP请求(默认情况下,使用提供的Android设备HTTP网络; Wi-Fi,Cell等)
  • MockWebServer-仅在测试中用于向OkHttp HTTP客户端提供硬编码的(非真实的)HTTP响应,以便在测试过程中不需要实时网络连接,或始终如一地模拟各种网络连接问题,例如断开的连接,无效的HTTP响应,服务器错误等。

您应该只在应用程序代码中使用OkHttp3。

测试中,您可以让MockWebServer伪造响应(如果以这种方式配置,则可以拦截)以测试应用程序对OkHttp3的调用。当您投入生产时,任何MockWebServer代码都不应被引用或调用(因为您将所有内容都放在了test / androidTest源代码目录中,对吗?),由于MockWebServer赢得了胜利,因此OkHttp3代码将通过Internet进行真正的HTTP调用。再也不会拦截他们了。

基本上,如果你在你的东西build.gradle比其他的testCompile 'com.squareup.okhttp3:mockwebserver:x.x.x'和/或androidTestCompile 'com.squareup.okhttp3:mockwebserver:x.x.x'比你就错了。真正的主生产应用程序不需要模拟Web服务器,因为它将通过Internet真正调用真实Web服务器。