在测试过程中绕过或模拟Apple权限对话

时间:2017-04-11 13:00:45

标签: ios unit-testing testing user-permissions kif

在CircleCI上运行时,我无法让我的测试套件完全通过。当在套房中运行并且单独运行时,一切都将在本地传递。我最终遇到了导致问题的问题,Apple Notification / Location权限对话框。测试仍在运行,但任何预期显示警报的测试都会失败,因为Apple对话框仍在屏幕上。每次在新设备上运行完整套件或删除应用程序时,都会发生这种情况。

我的问题是,处理这些对话的最佳方法是什么?我非常确定围绕它编写UI测试是不可能的,因为所有的UI测试对于排序和屏幕上的内容都非常严格。测试是随机的,对话框只显示第一次测试,其他人不必担心。

我目前的想法,但不确定如何继续:

  • 模拟位置/推送通知请求,以便它永远不会触发对话框。对我来说很困难,因为我有一个班级,可以完成推送和定位的所有工作。我是否反对Apple课程或我自己的课程?
  • 为只有1个触发对话框的测试并且可以关闭它的测试编写一个单独的目标。这仅在CI服务器上运行时使用。这可能不起作用,因为在测试运行之间可能不使用相同的模拟器。我认为会,但不能保证。
  • 将调试代码添加到实时代码以绕过其中一些对话框和权限。我在DEBUG中运行通知时已有代码,因为您实际上从未在模拟器上获得成功的令牌。我只是在调试中运行一个假的返回,所以我可以继续测试。还有什么?如果我能绝对帮助的话,我老实说不会考虑这个。已经有足够的"测试"现实代码库中的代码,如果可能的话,我想再阻止它。

如果有人有任何想法,会喜欢一些有关如何继续的反馈或示例。

设置详情:

  • ObjC
  • Xcode的最新版本,支持iOS 8及更高版本
  • 使用KIF和OCMock进行测试

1 个答案:

答案 0 :(得分:0)

我们有几种方法可以解决这个问题:

  1. 在beforeEach / setUp中,检查是否存在警告框,然后使用KIF的API来确认。
  2. https://github.com/plu/JPSimulatorHacks正常运作!
  3. 使用XCUITest触发权限流并在移至目标测试包之前启用所有权限。