我已向我的项目添加了功能,该功能可下载 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/