在 XCTest 用例中处理 CLLocationManager 授权请求

Handling request for CLLocationManager authorization in an XCTest case

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

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

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

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