4
我們正在使用Swift 2.x(最新版本)並希望BDD(單元測試)我們的代碼。另外,我們也使用RxSwift。我們的重寫方法不會在我們的自定義測試存根中被調用。我們的代碼:如何替代測試的清單Observation <T>?
protocol SomethingDeliverable {
func fetchSomething(somethingId: String, associatedList: String) -> Observable<String>
}
extension SomethingDeliverable {
func fetchSomething(somethingId: String, associatedList: String) -> Observable<String> {
return create { observer in
return NopDisposable.instance
}
}
}
爲了測試的緣故,我們有這樣的測試代碼:
private class StubSomethingApi: SomethingDeliverable {
var responseClosure: ((AnyObserver<String>) -> Void)?
func fetchSomething(somethingId: String, associatedList: String) -> Observable<String> {
return create { observer in
if let responseClosure = self.responseClosure {
responseClosure(observer)
}
return NopDisposable.instance
}
}
}
而不是fetchSomething返回可觀察< 字符串>,我們想返回可觀察< 牛逼>和StubSomethingAPI會成功覆蓋它以進行測試。 我們該怎麼做?
它看起來像Swift中的一個bug,我在一週前遇到過同樣的問題。這裏是我的代碼來演示一個錯誤http://swiftstub.com/399644727/ –
在探索解決方案的時候,我遇到了沒有編譯的PAT(帶相關類型的協議) - Alexis Gallagher的這個演講 - 帶有關聯的協議類型 - 幫助我理解爲什麼:https://youtu.be/XWoNjiSPqI8 – finneycanhelp
相關:https://lists.swift.org/pipermail/swift-evolution/2015-December/000037.html – finneycanhelp