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


我可以在测试中将值注入info.plist吗?
我可以在测试中完全模拟info.plist吗?


还是我应该:


在我的课程中添加一个函数以从info.plist文件中检索版本号,然后模拟该函数?
在应用启动时,将版本号存储在NSUserDefaults中并模拟吗?

最佳答案

我肯定会使用检索版本号的功能。这样,您可以从生产代码中的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提供程序进行生产。

09-25 16:05