久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

驗證 rxjava 訂閱者中的交互

Verify interactions in rxjava subscribers(驗證 rxjava 訂閱者中的交互)
本文介紹了驗證 rxjava 訂閱者中的交互的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

在 MVP 模式中描繪您的演示者訂閱返回觀察者的服務的情況:

Picture the situation in an MVP pattern where your presenter subscribes to a service returning an observer:

public void gatherData(){
   service.doSomeMagic()
      .observeOn(Schedulers.io())
      .subscribeOn(AndroidSchedulers.mainThread())
      .subscribe(new TheSubscriber());
}

現在類 TheSubscriber 從視圖中調用 onNext 一個方法,比如:

Now the class TheSubscriber calls onNext a method from the view, say:

@Override public void onNext(ReturnValue value) {
  view.displayWhatever(value);
}

現在,在我的單元測試中,我想驗證在非錯誤情況下調用方法 gatherData() 時,視圖的方法 displayWhatever(value) 被調用.

Now, in my unit test I would like to verify that when the method gatherData() is called on a non-erroneous situation, the view's method displayWhatever(value) is called.

問題:

有沒有干凈的方法來做到這一點?

Is there a clean way to do this?

背景:

  • 我正在使用 mockito 來驗證交互,當然還有更多
  • Dagger 正在注入除 TheSubscriber
  • 之外的整個 Presenter
  • I'm using mockito to verify the interactions and a lot more of course
  • Dagger is injecting the entire presenter except for TheSubscriber

我嘗試了什么:

  • 注入訂閱者并在測試中模擬它.我覺得有點臟,因為如果我想改變演示者與服務交互的方式(說不是 Rx),那么我需要改變很多測試和代碼.
  • 模擬整個服務.這還不錯,但需要我模擬很多方法,但我并沒有完全達到我想要的效果.
  • 在互聯網上四處查找,但似乎沒有人有一種干凈直接的方法來做到這一點

感謝您的幫助

推薦答案

假設您正在以類似的方式使用 serviceview 的接口:

Assuming that you are using interfaces for service and view in a similar manner:

class Presenter{
  Service service;
  View view;

  Presenter(Service service){
    this.service = service;
  }

  void bindView(View view){
    this.view = view;
  }

  void gatherData(){
    service.doSomeMagic()
      .observeOn(Schedulers.io())
      .subscribeOn(AndroidSchedulers.mainThread())
      .subscribe(view::displayValue);
  }
}

然后可以提供模擬來控制和驗證行為:

It is possible then to provide mock to control and verify behaviour:

@Test void assert_that_displayValue_is_called(){
  Service service = mock(Service.class);
  View view = mock(View.class);
  when(service.doSomeMagic()).thenReturn(Observable.just("myvalue"));
  Presenter presenter = new Presenter(service);
  presenter.bindView(view);

  presenter.gatherData();

  verify(view).displayValue("myvalue");
}

這篇關于驗證 rxjava 訂閱者中的交互的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

EditText: Disable Paste/Replace menu pop-up on Text Selection Handler click event(EditText:禁用文本選擇處理程序單擊事件上的粘貼/替換菜單彈出)
Multiline EditText with Done SoftInput Action Label on 2.3(2.3 上帶有完成 SoftInput 操作標簽的多行 EditText)
How to detect the swipe left or Right in Android?(如何在 Android 中檢測向左或向右滑動?)
Prevent dialog dismissal on screen rotation in Android(防止在Android中的屏幕旋轉對話框解除)
How do I handle ImeOptions#39; done button click?(如何處理 ImeOptions 的完成按鈕點擊?)
How do you set EditText to only accept numeric values in Android?(您如何將 EditText 設置為僅接受 Android 中的數值?)
主站蜘蛛池模板: 美女天堂 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 国产乱精品一区二区三区 | 免费观看一级特黄欧美大片 | 免费网站国产 | 日韩久久在线 | 色眯眯视频在线观看 | 亚洲精品一级 | 青青草原综合久久大伊人精品 | 在线观看亚洲欧美 | 一区二区三区中文字幕 | 精品91 | 夜夜爆操| 欧美一级二级视频 | 国产亚洲精品精品国产亚洲综合 | 古装人性做爰av网站 | 中文字幕亚洲国产 | 国产精品久久久久无码av | 一级免费在线视频 | 亚洲视频一区二区三区 | 久久国产精品免费一区二区三区 | 日韩视频a | 中文字幕在线一区二区三区 | 涩色视频在线观看 | 久草色播 | 国产精品美女久久久久久免费 | 日本大香伊一区二区三区 | 农村真人裸体丰满少妇毛片 | 精品国产18久久久久久二百 | 91精品国产自产精品男人的天堂 | 日韩在线观看中文字幕 | 国产精品99久久久久久www | 国产日韩欧美在线观看 | 国产ts人妖系列高潮 | 成人三级电影 | 日韩视频三区 | 欧美一级视频在线观看 | 91超碰在线 | 蜜臀久久 | 成人午夜精品 | 91成人精品视频 |