16

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

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

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

然而,活动/片段/适配器被证明更加困难。

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

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

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

4

2 回答 2

14

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

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

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

一些片段来帮助:

设置模拟服务器

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

于 2014-05-15T21:14:24.710 回答
2

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

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

您会在这里找到更多详细信息

于 2015-08-20T17:14:30.713 回答