gpt4 book ai didi

android - 伪造 HTTP 请求响应以在 Android 中进行测试

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:29 27 4
gpt4 key购买 nike

我正在编写一个 Android 应用程序,它有时需要通过 HTTP 从 REST API 请求数据。我正在使用 Apache DefaultHttpClient 来执行请求。有没有一种方法可以为此应用程序编写测试并在运行测试时“替换”DefaultHttpClient 的响应,以便测试结果始终一致?

作为我想要测试的示例,我正在访问的一个 Web 服务接受一个字符串并执行文本搜索,返回一个分页的对象列表。我需要测试列表为空、列表适合第一页或列表大于一页并且应用需要发出多个请求才能获取完整列表的情况。

我不是这个 Web API 的开发者,也不能修改它的响应,所以我不能改变它返回的内容。对于上面的例子,如果我想测试返回列表为空的情况,我可以只搜索一个我确定不会返回任何结果的字符串,但其他两种情况更难,因为服务可以返回总是在变化。

我认为理想情况下,我会在运行测试时获得修改后的 DefaultHttpClient,它会返回对给定 URL 的请求的硬编码结果,而不是实际执行网络请求。这样一来,无论实际 Web 服务的响应如何,我都能始终获得一致的结果。

我目前正在使用 Robotium 进行测试,但我也愿意使用其他工具。

最佳答案

是的,您绝对可以在使用 HttpClient 框架时“伪造”响应。这很复杂,我不得不将大部分细节留给您,但我会给您一个快速概述:

  1. 实现 ClientHttpRequestFactory,主要是为了让您可以覆盖 createRequest() 方法,这样您就可以...

  2. 返回您自定义的 ClientHttpRequest 实现,您可以在其中覆盖 execute() 方法,这样您就可以...

  3. 返回您自定义的 ClientHttpResponse 实现,您最终可以在其中返回您的假响应数据,例如getBody()可以返回一个文件的内容,你可以在getHeaders()中硬编码headers等。

剩下的就是弄清楚如何最好地将所有这些恶作剧与您的服务层联系起来。

关于android - 伪造 HTTP 请求响应以在 Android 中进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6025516/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com