我在项目中使用Swift,CocoaPods和Typhoon。我有一些课程为我提供Webservice的东西。在我的测试中,我想使用一个实际上不调用Webservice的不同类。所以我认为在我注入虚假web服务类的测试中使用另一个程序集是个好主意。
@objc public protocol AuthService {
func auth(username: String!, password:String!, onSuccess: (Token!) -> (Void), onError:(NSError!) -> (Void))
}
// "real" implementation
public class AuthServiceImpl: NSObject, AuthService {
public func auth(username: String!, password:String!, onSuccess: (Token!) -> (Void), onError:(NSError!) -> (Void)){
// do some webservice calls
}
}
// "fake" implementation
public class AuthServiceTestImpl: NSObject, AuthService {
public func auth(username: String!, password:String!, onSuccess: (Token!) -> (Void), onError:(NSError!) -> (Void)){
// do some file readings
}
}
Pods文件
platform :ios, '8.0'
target :Project, :exclusive => true do
pod 'Typhoon', '~> 2.3.4'
end
问题是我在我的装配中获得了“使用未声明的类型'TyphoonAssembly'”进行测试。 是否有最佳实践如何在台风测试中注入其他东西?
答案 0 :(得分:0)
这称为模块化装配,在用户指南here中进行了概述。
关键概念是:
TyphoonAssembly<MyProtocol>
或MyAssemblyType*
。 引导Typhoon进行测试:
let applicationAssembly = ApplicationAssembly()
let networkComponents = TestNetworkComponents()
TyphoonAssemblyActivator.withAssemblies([
applicationAssembly,
networkComponents]).activate()
//This view controller will now be injected with test network components.
let controller = assembly.viewController() as MyViewController
良好实践:如果您希望在多个不同的测试类中重用上述程序集,请为此创建一个方法以避免重复。
或者,您可能希望修补integration testing guide中概述的单个组件。