在单元测试中模拟iOS App版本号

时间:2016-06-08 13:44:25

标签: ios xcode swift unit-testing

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

  • 我可以在测试中向info.plist注入一个值吗?
  • 我可以在测试中完全嘲笑info.plist吗?

或者我应该:

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

  • 在应用启动时,将版本号存储在NSUserDefaults中,然后模拟这个?

1 个答案:

答案 0 :(得分:0)

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

甚至更好,创建另一个获取应用程序编号的类,并将实例注入到下载JSON的类中。然后,你可以随心所欲地嘲笑这个。

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 {
            ...
        }
    }
}

在那里,您可以使用一些存根模拟AppVersionProvider协议,并使用info.plist提供程序进行生产。