繁体   English   中英

Android 数据绑定 MockK:每个 {} 块内缺少调用

[英]Android data binding MockK: Missing calls inside every { } block

我正在使用 MockK 进行单元测试。 当我尝试模拟为我的布局生成的数据绑定 class 时,出现了奇怪的错误。 我想模拟布局内的视图之一数据绑定 class 包装使用

every { binding.someView } returns mockedView

但我越来越

io.mockk.MockKException:每个 {...} 块内缺少调用。

当我尝试对布局的<data>块中定义的绑定变量进行相同操作时,一切都按预期工作。 但是观点没有。

我错过了什么吗?

我知道问题发布已经有一段时间了,但我似乎找到了一种方法来做到这一点。

import android.widget.TextView
import androidx.appcompat.widget.AppCompatImageView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible
import com.example.R
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.junit5.MockKExtension
import io.mockk.unmockkAll
import io.mockk.verify
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith

@ExtendWith(MockKExtension::class)
internal class BindingMockkExample {

    private lateinit var binding: MyBinding

    @MockK(relaxed = true)
    private lateinit var rootView: ConstraintLayout

    @MockK(relaxed = true)
    private lateinit var textView: TextView

    @MockK(relaxed = true)
    private lateinit var imageView: AppCompatImageView

    @BeforeEach
    fun beforeEach() {
        every { rootView.findViewById<AppCompatImageView>(R.id.my_image_view) } returns imageView
        every { rootView.findViewById<TextView>(R.id.my_text_view) } returns textView
        binding = MyBinding.bind(rootView)
    }

    @AfterEach
    fun afterEach() {
        unmockkAll()
    }

    @Test
    fun `GIVEN something WHEN something happens THEN imageView becomes invisible`() {
        // do something that should make image invisible
        
        verify { imageView.isVisible = false }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM