我正在编写一个 Android 应用程序,有时需要通过 HTTP 从 REST API 请求数据。我正在使用 Apache DefaultHttpClient 来执行请求。有没有办法为此应用程序编写测试并在运行测试时“替换”DefaultHttpClient 的响应,以便测试结果始终一致?
作为我想要测试的示例,我正在访问的 Web 服务之一采用字符串并执行文本搜索,返回对象的分页列表。我需要测试列表为空、列表适合第一页或列表大于页面且应用程序需要发出多个请求才能获取完整列表的情况。
我不是此 Web API 的开发人员,也无法修改其响应,因此我无法更改它返回的内容。对于上面的示例,如果我想测试返回的列表为空的情况,我可以只搜索一个我确定不会返回任何结果的字符串,但其他两种情况更难,因为服务可以回报总是在变化。
我认为理想情况下,我有一种方法可以在运行测试时获取修改后的 DefaultHttpClient,它返回对给定 URL 的请求的硬编码结果,而不是实际执行网络请求。这样,无论真实的 Web 服务的响应如何,我总是可以获得一致的结果。
我目前正在使用 Robotium 进行测试,但我也愿意使用其他工具。
是的,在使用 HttpClient 框架时,您绝对可以“伪造”响应。这非常复杂,我不得不将大部分细节留给您,但我会给您一个快速概述:
实施ClientHttpRequestFactory
,主要是这样你可以覆盖createRequest()
方法,这样你就可以...
返回您的自定义实现ClientHttpRequest
,其中您可以覆盖execute()
方法,这样你就可以...
返回您的自定义实现ClientHttpResponse
您最终将能够返回您的虚假响应数据,例如getBody()
可以返回文件的内容,您可以将标题硬编码在getHeaders()
, etc.
剩下的就是弄清楚如何最好地将所有这些恶作剧与您的服务层联系起来。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)