【问题标题】:How to provide mock data when testing with Espresso使用 Espresso 进行测试时如何提供模拟数据
【发布时间】:2015-08-21 01:14:30
【问题描述】:

我们有一个非常大的 Android 应用程序,没有进行任何测试。我们正在遭受典型的质量/手动回归测试周期过长的问题。

作为一名刚接触Android的服务器端开发者,我想介绍一下开发者测试。

我可以了解如何使用 JUnit 对普通 Java 代码进行单元测试。

然而,事实证明,Activity/Fragments/Adapters 更加困难。

我观看了 GTAC 的 Espresso 视频,印象深刻并决定使用它。

我苦苦挣扎的地方是如何为我的测试用例提供模拟数据,然后确认显示。

这甚至可能吗?似乎 Espresso 用于黑盒测试,这极大地限制了它对开发人员(其目标受众)的使用,因为(通常)黑盒测试是由 QA 完成的。

【问题讨论】:

  • 如果我没看错,espresso 是 UI 测试框架,我的问题是为什么在测试 UI 时需要模拟值?
  • UI 显示的内容取决于它从某个来源(例如数据库或 rest url)接收到的数据。我想提供数据的变化并确保它正确显示。
  • 不确定这是否真的与 Espresso 相关。我们也在一个相当大的项目中使用 Espresso,具有多个后端和以各种方式模拟数据。例如。通过为已知查询提供预设响应的替代服务器,或者简单地通过交换客户端查询接口实现来验证预期查询并返回测试定义的响应。这些方法都不是使用任何 Espresso 功能实现的。

标签: android android-espresso


【解决方案1】:

有一个名为 mockwebserver 的库,它允许您模拟服务器响应。 GitHub: https://github.com/square/okhttp/tree/master/mockwebserver

如果你使用的是 gradle,你可以添加以下依赖:

 androidTestCompile 'com.squareup.okhttp:mockwebserver:1.3.0'

一些 sn-ps 可以提供帮助:

设置模拟服务器

MockWebServer server = new MockWebServer(); 

添加示例响应(仅在第一次调用服务器时有效)

server.enqueue(new MockResponse().setBody("Hello World Response"));

启动服务器

 server.play();

获取服务器的 url 以替换您正在使用的常规 url。

  URL baseUrl = server.getUrl("/");

现在,向任何使用 BaseURL 的东西发出请求,就像调用非模拟 Web 服务一样,第一次调用该服务时,它会从上面返回响应。棘手的部分是你有确切数量的 MockResponses 排队作为你的应用程序将发出的实际请求。调试/观察代码时要小心,因为如果您单步执行代码,调试器实际上会弹出其中一个响应。

如果您无法弄清楚,这里有一个 java web 项目(在 web 和 web 中的工作方式完全相同)我有几个基本示例。 https://github.com/digitalbuddha/GitPullRank

【讨论】:

  • 这是使用完整堆栈的 apk,稍作修改以使用受控端点。 QA 团队已经使用 appium 做到了这一点。我正在寻找一种开发人员方法,我可以在内部控制依赖项,但仍然可以在模拟器或设备中查看内容。
  • +1 这是恕我直言的方法。在开始 espresso 测试用例之前,请确保初始化 http 客户端(即Retrofit/okhttp/其他)以使用答案中所示的MockWebServers 根 URL 作为端点主机
  • 即如果使用RetroFit,则使用RestAdapter.Builder.setEndpoint(...);
  • 嗨,我最终这样做了,但是实际的 Web 服务被调用,然后模拟 Web 服务器我应该如何避免实际的 Web 服务被调用?请协助。 @Dori
【解决方案2】:

我遇到了同样的问题,但找不到任何完全符合我需要的框架。但 Wiremock 是最接近的。

我用它来记录 api 答案,和/或在再现模式下,当处于记录模式时,如果请求已经被记录,它不会再次记录。虽然它在 android (yet) 上不完全支持,但我在我的机器上 run it as standalone,然后运行应用程序或 espresso 测试。您还可以手动编辑或添加请求或答案。

你会发现很多更多的细节here

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
相关资源
最近更新 更多