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

问题 1

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

问题 2

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

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

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

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

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

[编辑]

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

【问题讨论】:

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

标签: objective-c unit-testing swift mocking core-location


【解决方案1】:

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

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

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

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

所以基本上答案是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    相关资源
    最近更新 更多