簡體   English   中英

為存根子類化RxSwift / Reactive擴展

[英]Subclassing RxSwift/Reactive extension for stubbing

假設我有一個帶有harvest函數的Field類,如下所示:

class Field {

    func harvest(handler: (Vegetable) -> Void) {
        …
        handler(carrot)
        …
        handler(potato)
        …
        handler(carrot)
        …
    }
}

我也有一個相同功能的Reactive版本/ API:

import RxSwift

extension Reactive where Base: Field {

    func harvest() -> Observable<Vegetable> {
        return Observable.create { observer in
            self.base.harvest(handler: observer.onNext)

            return Disposables.create()
        }
    }
}

出於測試目的,我創建了一個名為MockFieldField的子類,它覆蓋了harvest(:)以使用一組stubbed Vegetable調用處理程序。 當使用像field.harvest(:)這樣的MockField對象時,一切正常,我得到了茬蔬菜。

現在我想對存根調用field.rx.harvest的Reactive擴展做同樣的field.rx.harvest ,但我不能覆蓋它來返回stubbed Vegetables! 如何覆蓋rx命名空間中的函數?

可能最簡單的方法不是子類化,而是根據Field.harvest(handler:)定義harvest() -> Observable<Vegetable>

import RxSwift

extension Reactive where Base: Field {

    func harvest() -> Observable<Vegetable> {
        return Observable.create { observer in
            self.base.harvest(handler: observer.onNext)

            return Disposables.create()
        }
    }
}

這樣做你不需要維護兩個harvest實現。

PS:傳遞給一次性的塊應該取消動作,而不是發送完成的事件。 如果沒有設施取消harvest(handler:) ,您只需返回Disposables.create()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM