android - 基于 Web 服务的 Android 应用程序的测试策略

标签 android robolectric android-testing android-gradle-plugin

我有一个基于网络服务的应用程序,即每个 Activity 调用特定的网络服务并将数据填充到 View 中。我还没有做任何测试,但我正在切换到 Volley,我想我也可以添加一些测试。

我想知道此类应用的测试策略应该是什么。我正在玩弄 gradle-android-test-plugin尽管 Robolectric 还不能很好地与 Volley 配合使用,但应该很快(我希望)。

无论如何,我的应用程序结构是这样的:

  • ObjectJacksonRequest 类,它从网络服务获取数据并将它们解析为 POJO
  • RequestQueue 标准 volley 请求队列
  • BaseActivity 我的所有应用 Activity 的父 Activity ,其中包含 RequestQueue 对象和其他常见内容
  • 我用来将 UI 代码与网络代码分开的各种抽象 Activity 。例如,任何需要苹果的 Activity 都会扩展 AbstractAppleActivity。抽象 Activity 执行诸如返回时检查 Apple 是否仍在内存中、加载新的、为 ListView 设置适配器等事情。

这是我目前的问题。我对答案应该有一些直觉,但我想听听社区的意见。我相信人们可能还有其他问题,我们可以将这些问题添加到此列表中:

  • 测试各种 Web 服务的 ObjectJacksonRequest 对象的好方法是什么?我是否应该为返回和对象的每个 Web 服务编写单独的测试?
  • 我应该用实际的网络服务测试网络请求还是模拟响应?
  • 我应该测试 BaseActivity 和抽象 Activity 还是扩展它的功能的 Activity ?
  • 测试在网络请求完成之前没有插入任何值的 Activity 的最佳方法是什么?例如,加载苹果列表的 Activity 。

最佳答案

  • What's a good way to test the ObjectJacksonRequest object for the various web services ? Should I be writing a separate test for each web service that returns and object ?

如果我的理解正确,您想要测试网络服务后端。在那种情况下,我会为每个调用编写一个测试,或者甚至为每个调用编写多个测试,一个测试每个响应场景。

  • Should I be testing network requests with the actual webservices or mock the responses ?

我会 mock 这些回应。根据我的经验,如果你针对一个真正的网络服务进行测试,你会随机失败,因为连接速度变慢或超时或其他原因,你最终运行你的测试两次只是为了确保它不是随机失败。

  • Should I be testing the BaseActivity and the abstract activities or the activities that extend it for it's functionality ?

我不会测试 BaseActivities,除非它们有很多逻辑。

  • What is the best way to test an activity that doesn't have any values inserted until the web request is completed ? For example, an activity that loads a list of apples.

模拟网络服务响应,使其具有值。你可以用 Robolectric 做到这一点。我相信相关方法是 Robolectric.addRequestInterceptor

关于android - 基于 Web 服务的 Android 应用程序的测试策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18619856/

相关文章:

安卓录屏包括音频

android - jBehave 可以与 Robolectric 一起使用吗?

android - 关于 Robolectric。当我在 Activity 中有未初始化的对象时,如何测试该 Activity ?

android - 如何在 Google Play 上测试应用程序更新?

android - Android:使用音频文件填充listview并打开新 Activity

android - Activity 在 requestCode 中返回 "0"

Android布局困惑

java - 如何在 Android 上使用 Flurry 运行 Robolectric

Android Studio Robolectric 资源文件夹

android - 运行用于 Room 迁移的 Android Instrumented 测试时获取 GSON 的 ClassNotFoundException