[英]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.