Android 如何使用mock模拟Build.VERSION.SDK_INT

Android 如何使用mock模拟Build.VERSION.SDK_INT,android,testing,kotlin,android-testing,mockk,Android,Testing,Kotlin,Android Testing,Mockk,如何在mock中模拟Build.VERSION.SDK_INT 我已经做了以下工作: @Test fun testFoo(){ mockkStatic(Build::class) mockkStatic(Build.VERSION::class) every { Build.VERSION.SDK_INT } answers { 22 } } 我最终得到了io.mockk.MockKException:在每个{…}块中缺少调用。一旦代码命中每个块

如何在mock中模拟Build.VERSION.SDK_INT

我已经做了以下工作:

@Test
fun testFoo(){
    mockkStatic(Build::class)
    mockkStatic(Build.VERSION::class)
    every {
        Build.VERSION.SDK_INT
    } answers { 22 }
}

我最终得到了
io.mockk.MockKException:在每个{…}块中缺少调用。
一旦代码命中
每个
块。

您可以像这样围绕构建配置构建一个包装器

object MyAppBuildConfig {
    fun getVersionSDKInt(): Int {
        return Build.VERSION.SDK_INT
    }
}
然后用mockkObject模拟MyAppBuildConfig并返回所需的版本号

    mockkObject(MyAppBuildConfig)
    every { MyAppBuildConfig.getVersionSDKInt() } returns 22

与模拟API级别相比,模拟API级别可能会导致不准确的结果。这与其说是解决方案,不如说是一种变通方法