簡體   English   中英

Kotlin Mockk 錯誤:在 verify { ... } 塊中缺少調用

[英]Kotlin Mockk Error: Missing calls inside verify { ... } block

我已經閱讀了一些與此相關的問題或類似的錯誤消息(每個 {} 也會發生這種情況),但沒有一個問題使我取得成功。

有關如何使其工作的任何提示或建議?

這是我的設置和單元測試本身:

compileSdkVersion 29
defaultConfig {
   minSdkVersion 19
   targetSdkVersion 29
   testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

MockK version: 1.9.3.kotlin12
OS: Android
Kotlin version: 1.3.61
JDK version: jdk1.8.0_212
JUnit version: 4.12
Type of test: unit test

錯誤的堆棧跟蹤:

io.mockk.MockKException: Missing calls inside verify { ... } block.

    at io.mockk.impl.recording.states.VerifyingState.checkMissingCalls(VerifyingState.kt:52)
    at io.mockk.impl.recording.states.VerifyingState.recordingDone(VerifyingState.kt:21)
    at io.mockk.impl.recording.CommonCallRecorder.done(CommonCallRecorder.kt:47)
    at io.mockk.impl.eval.RecordedBlockEvaluator.record(RecordedBlockEvaluator.kt:60)
    at io.mockk.impl.eval.VerifyBlockEvaluator.verify(VerifyBlockEvaluator.kt:30)
    at io.mockk.MockKDsl.internalVerify(API.kt:118)
    at io.mockk.MockKKt.verify(MockK.kt:139)
    at io.mockk.MockKKt.verify$default(MockK.kt:136)

我的單元測試:

@Test
fun logout_clearsDatabase() {
    coroutineTestRule.testDispatcher.runBlockingTest {

        // ARRANGE
        database.dataDao().insert(listOf(DataDummies()))

        // ACT
        sut.logout()

        // ASSERT
        verify { database.clearAllTables() }
    }
}

我不知道我在這里做錯了什么。 database.clearAllTables()是 Room 提供的方法。 testDispatcher是 androidx 測試庫提供的TestCoroutineDispatcher()

更新/答案

感謝@Juan Cruy Soler 的輸入,我改變了注入數據庫的方式。 我沒有返回真實的房間數據庫,而是返回了它的間諜。 這樣間諜就被注入到 SUT 以及我的測試類中。 更改后,測試按預期運行。 我這是解決我問題的可行方法嗎? 讓 (Testing-)DependencyInjection 創建間諜有意義嗎?

database應該是模擬或間諜來調用驗證。
我認為這不是模擬,因為您在前一行調用了dataDao()方法。

  • 如果您不想模擬它而使用真實數據庫,您應該檢查database.dataDao().getData()返回一個空列表並刪除verify行。
  • 如果你嘲笑它,那么你可以刪除這一行database.dataDao().insert(listOf(DataDummies()))

您應該使用 skyk 來模擬真實場景。

val database = spyk<YouDataBaseReference>()

這樣做,您將能夠使用函數。

暫無
暫無

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

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