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

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

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

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

【问题讨论】:

    标签: unit-testing swift


    【解决方案1】:

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

    【讨论】:

    • 使用派生创建 CCLLocationManager 的模拟并不困难。只需要覆盖坐标属性。我也不想自动化测试。也许我在挑战极限,但我正在尝试获得一种可以轻松应用于所有需要模拟的对象的方法。
    • 祝你好运。 CLLocationManager 不仅仅是一个被覆盖的 coordinate 属性。
    • 如何在 Swift 中覆盖 coordinate
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2021-11-06
    相关资源
    最近更新 更多