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

2024-03-05

我正在编写一个 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(), etc.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

伪造 HTTP 请求响应以在 Android 中进行测试 的相关文章

  • EditText 中的验证允许 IP 或 Web Url 主机

    我需要对我的 EditText 进行验证 以便它允许我输入有效的 IP 地址格式 即示例 132 0 25 225 or 网址格式 www 例如 www example com 逻辑是 如果用户首先输入任何数值 则验证 IP 将执行操作 否
  • 已发布的 Flutter 应用程序在启动时崩溃

    编辑 此问题的解决方案是将您的 flutter 版本升级到较新的 dev 版本 then 1 7 0 您还可以上传单独的 APK 版本 但我个人不喜欢这个选项 请确保您没有从 flutter github 开发存储库下载 错误的构建 因为那
  • 在 Android 中创建和使用 9 补丁图像

    我最近听说了 9 补丁图像 我知道它是 9 平铺的并且是可拉伸的 我想了解更多 如何创建 9 块图像 有什么工具吗 我可以通过 AndroidSDK 或代码创建它吗 9 patch 相对于普通 png 的主要优点 它是否可以根据屏幕动态 自
  • 使用 APDU 命令的有效 NFC 读取比特率是多少?

    我目前正在使用 Android IsoDep trancieve 函数发送和接收累计 1628 字节的数据 该函数分布在 35 个 APDU 命令 选择应用程序 身份验证 读取 中 字节计数包括返回的 MAC 校验和以及由 transcie
  • 为什么我将可绘制文件重命名为 .9.png 后出现“Some file crunching failed”?

    我正在测试 9 patch 图像 在一切正常之前 我重命名drawable file ic button beat box default png to ic button beat box default 9 png 然后我收到错误 某些
  • AppCompat v21 工具栏更改徽标大小

    我正在从以前的操作栏迁移到 appcompat v21 中的新工具栏功能 我仍然想将徽标保留在操作栏 工具栏 的左上角 为此 我在布局中添加了支持工具栏 并为其创建了一个新的工具栏 app theme style NewToolBarSty
  • Selenium 中的断言和验证

    有人可以解释一下断言和验证之间的区别吗 我知道验证意味着它检查它是否存在 如果不存在 则测试失败并停止在那里 正确吗 那么 即使断言失败了 断言还会继续吗 我已经阅读了文档 但仍然无法理解它 不 你已经搞反了 在 Selenium IDE
  • Google Firebase - 如何删除崩溃报告?

    我最终失明了吗 还是没有明显的方法可以通过 Google Firebase Web 控制台删除 Firebase 崩溃报告 我的 Android 应用程序已成功记录报告 但现在出现大量 开发崩溃 占用了我在控制台中的大部分视图 这使得找到实
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • Android中不同线程的数据库访问

    我有一个在 AsyncTasks 中从互联网下载数据的服务 它解析数据并将其存储在数据库中 该服务持续运行 当服务写入数据库时 活动会尝试从数据库中读取更改 我有一个数据库助手 有多种写入和读取方法 这会导致问题吗 可能尝试从两个不同的线程
  • 从多个选项卡中的编辑文本字段获取文本

    我正在尝试创建一个使用选项卡作为输入表单的 Android 应用程序 基本上 我希望对其进行设置 以便用户可以在一个选项卡上输入一些信息 然后提交该信息 或者转到另一个选项卡并输入更多信息 然后从两个选项卡提交信息 我正在使用操作栏和片段来
  • Android ListView setSelection() 似乎不起作用

    我有一个ListActivity实现onListItemClick 并调用doSomething 类的功能 后者包含l setSelection position where l is the ListView object 现在有一个on
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • Android GCM 服务器的 API 密钥

    我有点困惑我应该为 GCM 服务器使用哪个 API 密钥 在文档中它说使用 android api 密钥 这对我不起作用并且总是给出未经授权的 http developer android com google gcm gs html ht
  • 在 AppAuth-Android 中注销

    我有一个用JAVA开发的Android应用程序 对于这个应用程序 我使用的是身份服务器4 https github com IdentityServer IdentityServer4作为我的 STS 一切正常 但我找不到任何注销的实现Ap
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • 在 Android 中上传文件出现内存不足错误

    我的上传代码如下 String end r n String twoHyphens String boundary try URL url new URL ActionUrl HttpURLConnection con HttpURLCon
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • android:layout_alignParentBottom 在没有显式布局高度作为 ListView 中的行的情况下使用时会被忽略

    当我使用RelativeLayout与任一fill parent or wrap content作为高度和一个指定的元素 android layout alignParentBottom true 它被忽略并在顶部对齐 设置高度Relati
  • Android ADT Eclipse 插件,parseSDKContent 失败

    我刚刚设置了我的第一个 Android 开发环境 其中包括 日食3 5 Mac OS X 10 5 适用于 x86 mac 的 Android SDK ADT Eclipse 插件 0 9 6 我已将 set PATH 设置为我的 SDK

随机推荐

  • Terraform 无效的“each”属性

    我有一个 tfvars json 文件 我想用它来传递我的服务器配置 test test machines master01 node type master image ubuntu 20 04 server type cx21 loca
  • 验证 ECPoint 在给定 x y 坐标和曲线名称的 EllipticCurve 对象上是否有效

    给定公钥的 x 和 y 坐标以及曲线名称 我需要确定这些坐标是否代表曲线上的有效点 如果是 则测试通过 如果不是 则测试失败 到目前为止我的代码是 String curve String testGroupHeaders get curve
  • 快速从子控制器调用parentController方法

    我正在做一个简单的customtableview项目 我有viewController swift和customcell swift文件 我在viewcontroller文件中有一个方法 我如何从customcell文件调用该方法 任何帮助
  • Android:暂停录音并恢复

    我使用以下代码作为基础来创建记录器 我可以开始和停止录音 并且它会正确保存在该位置 但现在我有一个要求暂停录音机 如何暂停录音机 并恢复录音 我在我的三星 Galaxy Ace 中看到了一个录音应用程序 它有一个暂停按钮 有人可以启发我吗
  • 使用按位运算符计算两个数字的和

    我粘贴代码以使用按位运算符查找两个数字的总和 请建议是否可以优化 谢谢 public static int getSum int p int q int carry 0 result 0 for int i 0 i lt 32 i int
  • JSP+Tomcat:单点登录

    如何使用 Tomcat 服务器为许多 JSP 应用程序创建单点登录的最佳方式 一种可能性是使用 Tomcats 构建 SSO 机制 http tomcat apache org tomcat 5 5 doc config host html
  • C++ 11 标准是否保证 std::atomic<> 实现为无锁操作?

    我正处于一个十字路口 我试图在基于互斥锁的数据结构和无锁 可能还有无等待 数据结构之间选择一个 在深入挖掘时 我没有发现有关 C 11 标准是否支持原子类型的无锁操作的任何消息 甚至对于基于宽度的积分 例如atomic uint32 t 换
  • 半透明 JFrame 边框

    我想让 JFrame 边框透明 所以我尝试使用我自己的 Border 类来做到这一点 private class ShadowBorder extends AbstractBorder private static final int RA
  • Java 中字符串(非结构化数据)的 K 最近邻实现

    我正在寻找 Java 中针对非结构化数据的 K 最近邻算法的实现 我发现了许多数字数据的实现 但是我如何实现它并计算文本 字符串 的欧几里得距离 以下是 double 的一个示例 public static double Euclidean
  • Python:如何使用 OpenCV 从网络摄像头捕获图像

    我想使用 OpenCV 从网络摄像头捕获并保存大量图像 这是我目前的代码 import cv2 camera cv2 VideoCapture 0 for i in range 10 return value image camera re
  • React Native导航组件路由问题

    新的反应本机用户在这里 我遇到了问题 不知道如何继续 我能够正确运行反应导航 然后开始收到错误 路由组件必须是 React 组件 但除非我遗漏了某些内容 否则我相信我引用的组件is一个反应组件 请参阅下面的 index android js
  • 如何转义 Ansible YAML 文件中字符串中的冒号?

    我想在安装过程中更改文件 var www kibana config js 中的一行代码 elasticsearch http window location hostname 9200 to elasticsearch http 192
  • Shell 脚本用户提示/输入

    这是别人写的一个粗略的 korn shell 脚本 我对使用 shell 语法不太了解 我什至不确定这是否可行 有什么方法可以让我运行这个文件并提示输入日期 这样我就不必每次都手动进入脚本并更改它 例如 我想将 1 12 09 替换为从用户
  • Qt:将变量传递给子项目

    我的项目的结构如下 Proj Proj pro subProj subProj pro subsubProj subsubProj pro 有没有一种方法可以在 subProj pro 中实例化全局变量并调用它 例如subsubProj p
  • Scala双重定义(2个方法具有相同的类型擦除)

    我用 scala 编写了这个 但它无法编译 class TestDoubleDef def foo p List String def foo p List Int 编译器通知 error double definition error m
  • .Net WikiText 到 HTML 解析器 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道 我知道 这听起来很愚蠢 但似乎没有开源强大的 NET 库可以将 Wikitext 解析为 HT
  • Python、Numpy、OpenCV——创建修改后的(同样快的)“addWeighted”函数

    我正在用 python 编写一个程序 该程序使用的函数与addWeightedopenCV 中的函数 不同之处在于 它实际上并不添加表示图像的 numpy 数组 而是采用在任何特定坐标处更亮的像素并使用该值 然而 我发现 尽管这些函数做的事
  • 有没有办法在 Azure Static Web App 中查看文件?

    有没有办法使用Azure Portal查看上传到Azure Static Web App的文件 我需要检查一些项目 我可以在 DevOps Repo 中看到该文件 但想确认它位于 Azure Static Web App 中的正确文件夹结构
  • 如何将参数发送到前置过滤器?

    我想在我的应用程序控制器中创建一个 before filter 方法 如下所示 def check role role name unless logged in user has role role name flash notice A
  • 伪造 HTTP 请求响应以在 Android 中进行测试

    我正在编写一个 Android 应用程序 有时需要通过 HTTP 从 REST API 请求数据 我正在使用 Apache DefaultHttpClient 来执行请求 有没有办法为此应用程序编写测试并在运行测试时 替换 DefaultH