在 XCTest 案例中处理对 CLLocationManager 授权的请求

Posted

技术标签:

【中文标题】在 XCTest 案例中处理对 CLLocationManager 授权的请求【英文标题】:Handling request for CLLocationManager authorization in an XCTest case 【发布时间】:2016-01-13 22:40:01 【问题描述】:

我正在为一些使用核心位置的代码编写一些单元测试。我有一个函数可以根据它是否有权访问用户的位置来做不同的事情。

如果我要运行应用程序,授予它对位置的访问权限,然后运行测试,它将能够测试对位置的授权,如果我要重置模拟器然后进行测试,它能够测试它无法访问的部分。虽然这有点工作,但这是一个巨大的痛苦,而且绝对不是自动化的。特别是因为这些测试是由 CI 服务器运行的,所以我需要一个更好的解决方案。

那么,有没有办法从 XCTest 为 CLLocationManager 设置授权状态,甚至在系统提示符上点击允许访问?

【问题讨论】:

我不认为有,除非你模拟对象。 【参考方案1】:

创建一个与 CLLocationManager 交互的 Facade。使用某种形式的Dependency Injection 访问此外观。然后你的测试可以注入一个假的,让你模拟调用你的 Facade 的结果。 (您可能需要对每个 CLAuthorizationStatus 值进行单独测试。)

【讨论】:

以上是关于在 XCTest 案例中处理对 CLLocationManager 授权的请求的主要内容,如果未能解决你的问题,请参考以下文章

在 RxSwift 中使用 Stub 提供程序进行注册验证的 XcTest 案例

使用 XCTest 在模拟器中使用 StartMonitoringForRegion 未监控 CLBeaconRegion

xctest - 预处理器宏

XCTest |词法或预处理器问题:未找到 MyProject-Swift.h

在非测试目标中使用 XCTest

iOS:使用 XCTest 对 UIViewController 组件进行单元测试