ios - 在单元测试中模拟iOS应用程序版本号

标签 ios xcode swift unit-testing

我已向我的项目添加了功能,该功能可下载 JSON 并将其中的版本号与当前安装的应用版本进行比较,以确定是否应启用某项功能。但是,我现在正在尝试对此进行单元测试,但我不确定如何模拟当前的应用程序版本。

  • 我可以在测试中向 info.plist 中注入(inject)值吗?
  • 我可以在测试中完全模拟 info.plist 吗?

或者我应该:

  • 在我的类中添加一个函数以从 info.plist 文件中检索版本号,然后模拟该函数?

  • 应用启动时,将版本号存储在 NSUserDefaults 中并模拟它?

最佳答案

我肯定会选择检索版本号的函数。这样您就可以从生产代码中的 info.plist 获取它,并在测试中模拟您想要的任何内容。此外,您还可以测试应用程序版本的检索:)

或者更好的是,创建另一个类来获取应用程序编号并将实例注入(inject)到下载 JSON 的类中。然后你就可以随心所欲地 mock 它。

protocol AppVersionProvider {
    func getAppVersion() -> String
}

class JSONDownloader {

    private let appVersionProvider: AppVersionProvider

    public init(appVersionProvider: AppVersionProvider) {
        self.appVersionProvider = appVersionProvider
    }

    public func downloadJSON() {

        if appVersionProvider.getAppVersion() != networkingCallResult.appVersion {
            ...
        }
    }
}

在那里,您可以使用一些 stub 在测试中模拟 AppVersionProvider 协议(protocol),并使用 info.plist 提供程序进行生产。

关于ios - 在单元测试中模拟iOS应用程序版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37704303/

相关文章:

ios - 世界到屏幕坐标

ios - iCarousel 中的分页

ios - 如何关闭 UISearchController View ?

ios - 如何释放不必要的应用程序内存?

ios - 如何在 CollectionView 中添加 SearchBar?

ios - 实现委托(delegate)

ios - 如何从非 ARC 项目更改为使用 ARC?

ios - Swift:调用时 inputAccessoryView 显示 UIToolbar 的空白白屏

ios - 将用 Swift 3.0 编写的模块迁移到 Swift 2.3?

ios - 无法添加来自不同 Realm iOS 和 Swift 的对象