'Android data binding MockK: Missing calls inside every { } block
I am using MockK for unit tests. When I try to mock data binding class generated for my layout I'm getting strange error. I want to mock one of the views inside the layout the data binding class wraps using
every { binding.someView } returns mockedView
but I'm getting
io.mockk.MockKException: Missing calls inside every { ... } block.
When I try the same with binding variable defined in <data> block of the layout everything works as expected. But views don't.
Am I missing something?
Solution 1:[1]
I know it's been a while since the question was posted, but I seem to have found a way to do this.
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 }
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | ????? ???????? |
