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 对象的主要内容,如果未能解决你的问题,请参考以下文章