使用默认实现测试协议扩展

时间:2018-02-27 15:33:12

标签: ios swift

在过去的项目中,我有一个对象使用构造函数注入来获取其他信息所需的对象。例如:

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)提供一个实现,但是现在我真的没有办法做到这一点,除非协议扩展可能依赖于另一个我可以的协议为该协议注入模拟。

0 个答案:

没有答案