How can I mock Build.VERSION.SDK_INT in mockk?
I've done the following:
@Test
fun testFoo(){
mockkStatic(Build::class)
mockkStatic(Build.VERSION::class)
every {
Build.VERSION.SDK_INT
} answers { 22 }
}
I end up getting io.mockk.MockKException: Missing calls inside every { ... } block.
once the code hits the every
block.
You can build a wrapper around the Build config like this
object MyAppBuildConfig {
fun getVersionSDKInt(): Int {
return Build.VERSION.SDK_INT
}
}
Then mock the MyAppBuildConfig with mockkObject and return your desire version number
mockkObject(MyAppBuildConfig)
every { MyAppBuildConfig.getVersionSDKInt() } returns 22
I ended up modifying Build.VERSION.SDK_INT
using reflection. I added the following helper:
private fun setStaticFieldViaReflection(field: Field, value: Any) {
field.isAccessible = true
Field::class.java.getDeclaredField("modifiers").apply {
isAccessible = true
setInt(field, field.modifiers and Modifier.FINAL.inv())
}
field.set(null, value)
}
and then called it like this in my test:
setStaticFieldViaReflection(Build.VERSION::class.java.getField("SDK_INT"), 23)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With