作者:babe | 来源:互联网 | 2023-02-12 11:24
我是一名经验丰富的Objective-c程序员,但我不能对Swift说同样的话,我很难在不使用像OCMock这样的框架的情况下在swift中测试一个类.
问题:我正在将Firebase集成到一个混合的Objective-C/Swift项目中,我需要根据应用程序的构建配置对其进行配置.
我为此编写了一个Swift类(将由obj-c app委托使用),但是由于firebase框架是通过静态类方法配置的FIRApp.configure(with: FIROptions)
,所以我需要以某种方式模拟这个方法以进行单元测试它.
我的代码,没有任何处理依赖注入,看起来像这样:
@objc class FirebaseConfigurator: NSObject{
func configureFirebase(){
let cOnfig= configManager.buildConfiguration
var optiOnsPlistBaseName= getPlistName()
let optiOnsFile= Bundle.main.path(forResource: optionsPlistBaseName, ofType: "plist")
guard let opts = FIROptions(contentsOfFile: optionsFile) else{
assert(false, "fatal: unable to load \(optionsFile)")
return
}
FIRApp.configure(with: opts)
}
func getPlistName() -> String{
// retrieves correct plist name and returns it
}
}
我做了一些研究,但到目前为止我没有发现任何适合我的解决方案,但我想到的是以下其中一项:
我可以传递一个默认的函数FIRApp.configure(with:)
但是我应该从objective-c执行此操作并且函数也接受一个参数,我正在努力学习语法
我可以在FIRApp周围使用包装器,但我想避免它,除非唯一可行的清洁解决方案.
我可以继续使用协议并进行依赖性反转,但是作为静态的方法我再次遇到语法,我找不到一个简单的方法来使用静态方法对模拟类进行DI.
作为参考(个人和可能需要它的人),这些是我认为有用的一些资源,我将继续挖掘:
处理Swift中的静态绑定
这个问题
本文介绍了通用单元测试
同时,每一个帮助都会非常感激.
作为旁注,有很多方法可以解决这个问题而不用嘲笑静态类方法,但我的目标是找到一种嘲弄它的方法,以便在测试更复杂时更好地理解最佳实践的情况.