【问题标题】:Bypass or Mock Apple Permission Dialogs during Testing在测试期间绕过或模拟 Apple 权限对话框
【发布时间】:2017-09-06 21:14:00
【问题描述】:

我的测试套件在 CircleCI 上运行时无法完全通过。在套件中运行和单独运行时,一切都将在本地通过。我最终遇到了导致问题的问题,即 Apple 通知/位置权限对话框。测试仍在运行,但任何期望显示警报的测试都会失败,因为 Apple 对话框仍在屏幕上。每次您在新设备上运行完整套件或删除应用时,基本上都会发生这种情况。

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

我目前的想法,但不确定如何进行:

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

如果有人有任何想法,希望得到一些关于如何进行的反馈或示例。

设置详情:

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

【问题讨论】:

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


    【解决方案1】:

    我们有几种解决方法:

    1. 在beforeEach/setUp中,检查是否存在alert框,然后使用KIF的API进行确认。
    2. https://github.com/plu/JPSimulatorHacks 有效!
    3. 在移动到目标测试包之前,使用 XCUITest 触发权限流并打开所有权限。

    【讨论】:

    • 对于 1 或 2,你有如何做到这一点的例子吗?
    猜你喜欢
    • 2020-10-18
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2017-03-16
    相关资源
    最近更新 更多