Swift 单元测试:HotSwap 一个 CLLocationManager 对象

Posted

技术标签:

【中文标题】Swift 单元测试:HotSwap 一个 CLLocationManager 对象【英文标题】:Swift Unit test: HotSwap an CLLocationManager Object 【发布时间】:2014-11-19 23:54:44 【问题描述】:

我想对我的应用程序进行实时测试。为此,我需要更改 CLLocationManager 对象,它是我的测试函数上的 AppDelegate 的成员。

如何在不向应用程序目标添加交换功能的情况下将我的locationManager 属性对象交换为CLLocationManager 的模拟版本? 目标是将所有测试代码保留在测试目标上。如果 Swift 涵盖了 http://nshipster.com/xctestcase/ 上发布的所有模拟需求,我应该错过一些技巧,但是:

扩展无法访问用于存储CLLocationManager 的私有变量_locationManager,因为扩展是在目标测试中声明的,并且是另一个模块的一部分。 派生无法更改AppDelegate,因为我无法更改已创建对象的类

【问题讨论】:

【参考方案1】:

与其费力地模拟一个复杂的系统 API,何不直接使用 Xcode 中内置的位置服务模拟机制呢?只需转到 Product > Debug > Simulate Location 并在此处根据需要设置位置。

【讨论】:

使用派生创建 CCLLocationManager 的模拟并不困难。只需要覆盖坐标属性。我也不想自动化测试。也许我在挑战极限,但我正在尝试获得一种可以轻松应用于所有需要模拟的对象的方法。 祝你好运。 CLLocationManager 不仅仅是一个被覆盖的 coordinate 属性。 如何在 Swift 中覆盖 coordinate

以上是关于Swift 单元测试:HotSwap 一个 CLLocationManager 对象的主要内容,如果未能解决你的问题,请参考以下文章

Swift 单元测试 - 等待 viewDidLoad

单元测试 WKNavigationDelegate 函数 swift

Swift 项目的单元测试类

如何在 Swift 中设置单元测试?

使用 Swift 和 Obj-C 进行单元测试

Swift 框架的 CocoaPod 和单元测试