Mar*_*ano
5
testing
android
我想编写一个仪器测试来验证使用 API23+ 上的 FusedLocation API 请求位置更新的应用程序的行为。
我有一些要求:
- 测试必须在模拟器 (AVD) 中运行,因为我希望测试在 Travis CI 或 Circle CI 等持续集成服务中运行。
- 我想使用 UI Automator 测试 Marshmallow 权限请求对话框是否正确弹出。
- 我想通过使用断言检查 requestLocationUpdates() 返回的 Location 对象来确保我的代码正常工作。
由于需要在模拟设备上进行测试,因此我们必须使用 FusedLocation.setMockLocation() 来获取位置,否则 requestLocationUpdates() 将不会产生任何结果。
到目前为止,我遇到了这些问题:
- setMockMode() 和 setMockLocation() 都需要位置权限:这意味着我必须在测试代码中请求位置权限,并且一旦我的测试代码到达 requestLocationUpdates() 调用,它就不会再次请求权限(因为它已经拥有它)从而不允许我使用 UI Automator 测试权限请求对话框。
- setMockLocation() 需要在开发人员选项中手动设置“允许模拟位置”,因此持续集成将会失败,因为每次构建都会创建一个新的模拟器,并且默认情况下会禁用“允许模拟位置”。
在我看来,我已经走进了死胡同。请证明我错了!