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

當我想模擬數據并測試 UI 片段時,doNothing() 不起

doNothing() does not work when i want to mock data and test UI Fragment(當我想模擬數據并測試 UI 片段時,doNothing() 不起作用)
本文介紹了當我想模擬數據并測試 UI 片段時,doNothing() 不起作用的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我要用 Espresso test fragment 然后我想 mock viewmodels 和成員.

I am going to test fragment with Espresso then i want to mock viewmodels and members.

在我的 viewModel 我有一個 void function 像這樣:

In my viewModel i have a void function like this :

fun getLoginConfig() {
    viewModelScope.launchApiWith(_loginConfigLiveData) {
       repository.getLoginConfig()
    }
}

在測試 fragment 當我們從 viewModel 調用 getLoginConfig() 我想用 mock>doNothing() 但我面臨這個錯誤:

In test fragment when we call getLoginConfig() from viewModel i want to mock it with doNothing() but i faced with this error :

org.mockito.exceptions.misusing.UnfinishedStubbingException: 
Unfinished stubbing detected here


E.g. thenReturn() may be missing.
Examples of correct stubbing:
    when(mock.isOk()).thenReturn(true);
    when(mock.isOk()).thenThrow(exception);
    doThrow(exception).when(mock).someVoidMethod();
Hints:
 1. missing thenReturn()
 2. you are trying to stub a final method, which is not supported
 3. you are stubbing the behaviour of another mock inside before 'thenReturn' instruction is completed

testFragmentClass 的這一行:

   @Before
    fun setUp() {
        //logOut


        mockVm = mock(SplashVM::class.java)

        loadKoinModules(module {
            single {
                mockVm
            }
        })
}




   doNothing().`when`(mockVm.getLoginConfig()).let {
       mockVm.loginConfigLiveData.postValue(Resource.Success(
           LoginConfigResponse(
               listOf("1"),1,1,"1",true)
       ))
   }

推薦答案

一些事情:

  • doNothing 什么都不做,這對于 mock 上的 void 方法來說是不必要的.這是默認行為.您只希望 doNothing 用于間諜或已存根的模擬.
  • 如果您希望在響應模擬調用時發生特定的事情,doAnswer 就是這樣去.
  • doVerb 語法中,Mockito 期望那里只有一個變量;表達式不應調用 mock 上的方法,否則 Mockito 會認為您已經失去興趣并拋出 UnfinishedStubbingException.
  • doNothing just does nothing, which is unnecessary for void methods on a mock. It's the default behavior. You only want doNothing for spies or already-stubbed mocks.
  • If you want something specific to happen in response to a call on a mock, doAnswer is the way to go.
  • In doVerb syntax, Mockito expects that there is only a variable there; the expression should not call a method on a mock, or else Mockito thinks you've lost interest and throws UnfinishedStubbingException.

因此你的修復看起來像:

Therefore your fix looks like:

doAnswer {
  mockVm.loginConfigLiveData.postValue(Resource.Success(
    LoginConfigResponse(
      listOf("1"),1,1,"1",true)
  ))
}.`when`(mockVm).getLoginConfig()

這篇關于當我想模擬數據并測試 UI 片段時,doNothing() 不起作用的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持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 中的數值?)
主站蜘蛛池模板: 高清不卡毛片 | 精品av天堂毛片久久久借种 | 久久久一区二区三区 | 狠狠干美女 | 亚洲韩国精品 | 亚洲精品一二区 | 亚洲一区二区精品视频在线观看 | 在线观看中文字幕 | 日韩网站在线 | 三区四区在线观看 | 黄篇网址 | 中文字幕av一区 | 久久婷婷香蕉热狠狠综合 | 成人欧美一区二区三区黑人孕妇 | 青娱乐av | 中文字字幕在线中文乱码范文 | 色综合久久久 | 欧美日韩1区 | 在线播放中文字幕 | 国产精品入口久久 | 日韩免费中文字幕 | 亚洲色图网址 | 91久久久精品国产一区二区蜜臀 | 超碰人人爱 | 国产美女一区二区 | 亚洲成人免费视频 | 久久精品色视频 | 欧美日韩精品一区 | 精品国产乱码久久久久久丨区2区 | 国产欧美日韩综合精品一 | 一区二区三区四区在线 | 成人精品一区二区三区 | 久久国产精品视频 | 日韩精品在线免费 | 久久国产高清 | 人人看人人射 | 在线中文视频 | 久久精品91久久久久久再现 | 一区二区三区影院 | 欧美日韩国产中文 | a爱视频 |