簡體   English   中英

RxJava 測試 Observable

[英]RxJava test Observable

有類似TestSubscriber東西。 它具有非常有用的功能,例如awaitTerminalEvent()getOnNextEvents()等。

是否有一個等效的TestSubscriber for Observable可以固定在序列中間的某個 observable 上?

我想測試一些具體案例,其中之一是:

  • 我有一個在構造函數中接受Observable的類。 其中一種方法是在onErrorResumeNext操作符中調用Observable 所以在特定條件下執行主Observable可能會調用經過測試的Observable 需要像assertExecuted這樣的東西。

  • 在上述情況下,我想測試執行Observable Thread

  • 我想知道, Observable根據它的輸入返回了什么。

這些情況中的每一種都需要解決方法,例如:

observable
  .doOnNext(o -> {
      // Observable was given a value
   });

如果沒有可用的好方法,如何使上面的調用更干凈?

斷言需要在作為 observable 一部分的 lambda 之外進行測試,因為 lambda 本身可能永遠不會運行(就像在onErrorResumeNext情況下一樣)。 所以你需要在 observable 之外定義一些對象來攜帶我們想要測試的結果。

測試 observable 的常用技術是使用 Atomic 對象來記錄事件:

AtomicBoolean executed = new AtomicBoolean(false);
Observable
  .empty()
  .doOnNext(t -> executed.set(true))
  .subscribe();
assertFalse(executed.get());

這個例子可以用TestSubscriber更好地完成,但它展示了技術。

rxjava-extras如果您使用的是 Java 6(見鬼只使用 retrolambda),則具有便利的類,因此您無需為此用例編寫匿名類:

AtomicBoolean executed = new AtomicBoolean(false);
Observable
  .empty()
  .doOnNext(Actions.setToTrue(executed))
  .subscribe();
assertFalse(executed.get());

暫無
暫無

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

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