4

Swift 2.x (最新) を使用しており、コードを BDD (単体テスト) したいと考えています。余談ですが、RxSwiftも使用しています。オーバーライドされたメソッドは、カスタム テスト スタブでは呼び出されません。私たちのコード:

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
        }
    }
}

Observable< String > を返す fetchSomething の代わりに、Observable< T > を返し、テストのために StubSomethingAPI がそれを正常にオーバーライドするようにしたいと考えています。どうすればそれができますか?

4

1 に答える 1

0

これはあなたが探しているものですか?

protocol SomethingDeliverable {
    associatedtype Element

    func fetchSomething(somethingId: String, associatedList: String) -> Observable<Element>
}

extension SomethingDeliverable {
    func fetchSomething(somethingId: String, associatedList: String) -> Observable<Element> {
        return create { observer in
            return NopDisposable.instance
        }
    }
}

private class StubSomethingApi<T>: SomethingDeliverable {

    typealias Element = T

    var responseClosure: ((AnyObserver<T>) -> Void)?

    func fetchSomething(somethingId: String, associatedList: String) -> Observable<T> {
        return create { observer in
            if let responseClosure = self.responseClosure {
                responseClosure(observer)
            }
            return NopDisposable.instance
        }
    }
}
于 2016-07-17T03:56:13.637 に答える