Android 如何在使用浓缩咖啡进行测试时提供模拟数据

Android 如何在使用浓缩咖啡进行测试时提供模拟数据,android,android-espresso,Android,Android Espresso,我们有一个非常大的Android应用程序,没有测试。我们遇到了典型的质量/太长的手动回归测试周期问题 作为一名服务器端开发人员,我是Android新手,我想介绍开发人员测试 我可以看到如何使用JUnit对普通Java代码进行单元测试 然而,事实证明,活动/片段/适配器更加困难 我看了GTAC的浓缩咖啡视频,印象深刻,决定使用它 我正在努力的是如何为我的测试用例提供模拟数据,然后确认显示 这可能吗?Espresso似乎用于黑盒测试,这大大限制了开发人员(其目标受众)的使用,因为(通常)黑盒测试是由

我们有一个非常大的Android应用程序,没有测试。我们遇到了典型的质量/太长的手动回归测试周期问题

作为一名服务器端开发人员,我是Android新手,我想介绍开发人员测试

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

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

我看了GTAC的浓缩咖啡视频,印象深刻,决定使用它

我正在努力的是如何为我的测试用例提供模拟数据,然后确认显示


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

有一个名为mockwebserver的库,允许您模拟服务器响应。 github:

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

 androidTestCompile 'com.squareup.okhttp:mockwebserver:1.3.0'
以下是一些代码片段:

设置模拟服务器

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

启动服务器

 server.play();
获取服务器的url以替换您正在使用的常规url

  URL baseUrl = server.getUrl("/");
现在,以调用非模拟web服务的相同方式向使用BaseURL的任何对象发出请求,第一次调用该服务时,它将返回上面的响应。棘手的部分是,你必须有确切数量的模拟响应排队作为实际请求你的应用程序将作出。调试/查看代码时要小心,因为如果您单步执行代码,调试器实际上会弹出其中一个响应

如果您在理解上有困难,这里有一个JavaWeb项目(在web中的工作方式与在web中的工作方式完全相同,而不是在web中),我有一些基本的例子。

我也面临同样的问题,找不到任何适合我需要的工作。但是,Wiremock是接近的一个

我用它来记录api的答案,和/或在复制模式下,在记录模式下,如果请求已经被记录,它将不会再次记录。虽然它在android()上不完全受支持,但我在我的机器上安装了它,然后运行应用程序或浓缩咖啡测试。您还可以手动编辑或添加请求或答案


如果我没说错的话,你会发现更多的细节

,espresso是UI测试框架,我的问题是为什么在测试UI时需要模拟值?UI显示的内容取决于它从某些源(如数据库或rest url)接收到的数据。我想提供数据的变化,并确保其正确显示。不确定这是否真的与浓缩咖啡有关。我们在一个相当大的项目中也使用了浓缩咖啡,有多个后端和各种方式的模拟数据。例如,通过为已知查询提供固定响应的替代服务器,或仅通过交换客户端查询接口实现来验证预期查询并返回测试定义的响应。这些方法都不是使用任何浓缩咖啡功能实现的。这是使用一个完整的堆栈apk,稍加修改即可使用受控端点。qa团队已经使用appium完成了这项工作。我正在寻找一种开发人员方法,在这种方法中,我可以在内部控制依赖项,但仍然可以在模拟器或设备中看到东西。在启动
espresso
测试用例i.e.之前,请确保初始化http客户端(即
Reformation
/
okhttp
/无论什么),以使用
MockWebServer
s根url,如答案所示。如果使用
改装
重新适应.Builder.setEndpoint(…)嗨,我最终这样做了,但是实际的web服务被调用,然后模拟web服务器。我应该如何避免实际的web服务被调用?请帮忙@从2016年1月起,Android现在支持此功能。查看另一个堆栈溢出回答:嗨,请把你的建议作为这个问题的答案。。
  URL baseUrl = server.getUrl("/");