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

est*_*ing 5 xcode unit-testing ios xctest swift

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

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

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

Jon*_*eid 5

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