【问题标题】:Android Unit test API calls with Retrofit2使用 Retrofit2 的 Android 单元测试 API 调用
【发布时间】:2016-06-03 19:01:30
【问题描述】:

我没有在 Android 上做过任何测试,所以如果这看起来是个愚蠢的问题,请多多包涵。 我正在开发一个应用程序,它从一个宁静的 API 服务进行大量网络调用。为了进行网络调用,我使用Retrofit2RxJava

仅测试这些调用是否有效的最佳做法/框架是什么?我已经开始阅读使用Junit4Mockitotesting 的Google Codelab,但我不想在UI 中单击任何当前开始测试,只是检查调用的不同API 版本是否支持。

【问题讨论】:

  • 我已经用“Junit4”尝试过,但是在使用我的 Rest Adapter 时遇到了太多问题,特别是“App Context”,因为我们的测试用例完全独立于我们的应用程序。我也尝试使用“MockContext”,但对我不起作用。嗯,这是一个很好的问题,我也期待它的答案。请也发布您的研究。
  • 您可以使用 JUnit4 和 MockWebServer github.com/square/okhttp/tree/master/mockwebserver

标签: android unit-testing rx-java retrofit2


【解决方案1】:

这里有一些我正在使用的步骤:

  • 一定要使用 mockito 和 junit4 :)
  • 我避免对这些情况进行 UI 测试
  • 将改造 Api 作为参数传递给要测试的类
  • 在测试中创建一个模拟改造 api,将此作为参数传递,以便您可以选择您希望“Api”返回的内容,例如对象或错误(请参阅Mockito.when()
  • 使用 RxJava 的 TestSubscriber 来测试一个方法,例如Observable<Location> getLocationFromApi()
  • 避免在测试类中使用线程(例如 .observeOn(mainThread()))。如果不可避免地在 TestSubscriber 中使用 awaitTerminalEvents。如果没有终端,甚至重新考虑你的测试

一般提示:

  • 尝试模块化您的代码,使每个类的功能很少 -> 更易于测试。
  • 要有耐心,不要期望编写测试,例如一周内完成 5% 的代码 :) 无论团队规模大小,这都是一个缓慢的过程

【讨论】:

  • 谢谢你的详细步骤,我会试试这个:)
猜你喜欢
  • 2016-06-15
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
相关资源
最近更新 更多