用于测试的模拟 CLLocationManager (swift)

Posted

技术标签:

【中文标题】用于测试的模拟 CLLocationManager (swift)【英文标题】:Mock CLLocationManager (swift) for Testing 【发布时间】:2015-01-28 13:28:53 【问题描述】:

问题 1

在我真正开始自己编写东西之前,是否存在将 CLLocationManager 包装到模拟框架中的现有框架(obj-c 或 swift)?

问题 2

制作模拟位置管理器的最佳方法是什么?

创建一个围绕 CLLocationManager 的类,对该类的任何调用都将返回测试数据或实际的 CLLocation 数据,具体取决于我们运行的“模式”

扩展 CLLocationManager 并覆盖所有我想“搞砸”的调用

有没有我没想到的第三个选项?

我主要想知道假设没有任何可用的东西,每种方法的优点/缺点是什么

[编辑]

虽然 XCode 中有一个模拟位置功能,但它并不能完全满足我的需求。如果我没记错的话,它不做标题,它们必须被插值。此外,我最终可能会修改这个类以从飞行模拟器驱动 CLLocationManager

【问题讨论】:

为什么不在 Xcode 或/和 ios 模拟器中使用“模拟位置”功能? 我需要比模拟位置功能提供的更多功能(例如无法模拟标题) 必须用 Swift 编写吗? github上有几个CL模拟器如this one “模拟位置”不适用于测试。您是如何找到解决方案的? 【参考方案1】:

所以我想我会重新审视这个问题。我最终做的是编写一个完整的框架来处理相关应用程序的位置(和其他数据)。我们正在使用外部 GPS 传感器。

这个类叫做DataManager,我创建了一个通用的LocationMessage类型(可以用msg.asCLLocation转换成CLLocation)。

这个大型框架的一部分允许记录数据和文件播放,我们可以从

CoreLocation Xplane 插件 UDP 流 录制的文件 外部 GPS 传感器

所以基本上答案是:

创建一个封装 CLLocationManager 的类,对该类的任何调用都将返回测试数据或实际 CLLocation 数据,具体取决于我们运行的“模式”

【讨论】:

以上是关于用于测试的模拟 CLLocationManager (swift)的主要内容,如果未能解决你的问题,请参考以下文章

CLLocationManager 总是返回速度:-1

iPhone 模拟器上的 CLLocationManager 因 kCLErrorDomain Code=0 而失败

CLLocationManager startMonitoringVisits在模拟器中不起作用

为啥 CLLocationManager 在模拟器中的 iphone SDK 4 beta 上返回空位置?

CLLocationManager 没有收到更新

CLLocationManager 没有返回正确的位置