我有一个基于网络服务的应用程序,即每个 Activity 调用特定的网络服务并将数据填充到 View 中。我还没有做任何测试,但我正在切换到 Volley
,我想我也可以添加一些测试。
我想知道此类应用的测试策略应该是什么。我正在玩弄 gradle-android-test-plugin
尽管 Robolectric
还不能很好地与 Volley
配合使用,但应该很快(我希望)。
无论如何,我的应用程序结构是这样的:
ObjectJacksonRequest
类,它从网络服务获取数据并将它们解析为 POJORequestQueue
标准 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/