在过去的项目中,我有一个对象使用构造函数注入来获取其他信息所需的对象。例如:
class Foo {
let appInfo: AppInfoType
init(appInfo: AppInfoType) {
self.appInfo = appInfo
}
}
protocol AppInfoType {
func build(bundle: Bundle) -> String?
}
然后,如果在Foo中,需要有关应用程序的信息,例如build,它可以使用AppInfoType来获取该信息。我想我会看到协议扩展看起来像什么。
extension AppInfoType {
func build(bundle: Bundle) -> String? {
return bundle.infoDictionary?[kCFBundleVersionKey as String] as? String
}
}
class Foo: AppInfoType {
}
所以现在我只需要调用build(bundle: Bundle.main)
即可在Foo中实现相同的功能。但现在有没有简单的方法来测试它?通过第一种方式,我仍然可以创建一个MockAppInfoType并为build(bundle:Bundle)提供一个实现,但是现在我真的没有办法做到这一点,除非协议扩展可能依赖于另一个我可以的协议为该协议注入模拟。