android - 在 Kotlin 中进行单元测试的 BuildConfigField 模拟

标签 android unit-testing kotlin buildconfiguration

我试图尽可能多地覆盖 Kotlin Android 库 我遇到了一个关于自定义 BuildConfig 变量的问题,更广为人知的是 buildConfigField .

我想模拟这个变量来测试 truefalse值(value)观。

从 Gradle 文件中提取:

android {
    defaultConfig {
        buildConfigField "boolean", "ENABLE_LOG", "false"
    }
    flavorDimensions "log"
    productFlavors {
        loggable {
            buildConfigField "boolean", "ENABLE_LOG", "true"
            dimension "log"
        }
        notloggable {
            dimension "log"
        }
    }
}

要测试的 Kotlin 函数的提取:
fun buildClient(): MyClient {
    var myClientBuilder : MyClient.Builder = MyClient.Builder();

    if (BuildConfig.ENABLE_LOG) {
        val interceptor = LoggingInterceptor();
        interceptor.setLevel(LoggingInterceptor.Level.ALL);
        myClientBuilder.addInterceptor(interceptor);
    }

    return myClientBuilder.build()
}

单元测试 :
@Test
fun buildClient_enableLog_oneInterceptor() {
    // GIVEN
    Mockito.mock(BuildConfig::class.java)
    Mockito.doReturn(true).`when`(BuildConfig.ENABLE_LOG)

    // WHEN
    val myClient = myService!!.buildClient()

    // THEN
    assertNotNull(myClient)
    assertNotNull(myClient.interceptors())
    assertEquals(1, myClient.interceptors().size)
}

我尝试了不同的东西,但它从来没有奏效。
如果有人已经完成了这项工作,它可以帮助我很多(我猜还有其他人)。

谢谢

最佳答案

ReflectionHelpers.setStaticField(BuildConfig::class.java, "ENABLE_LOG", true)

关于android - 在 Kotlin 中进行单元测试的 BuildConfigField 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52181057/

相关文章:

c# - 是否有一个 Android 相当于 iOS 上 UISliders 的连续标志?

scala - 在 Play 2.6 中对 Controller 进行单元测试

reactjs - 使用 Jest 模拟 API 错误响应时,组件中的 Fetch 未定义

Kotlin 类型自动装箱 vs 原始类型

android - 当回收站 View 中的第一项不可见但在第一项可见时隐藏时,如何在滚动上显示我的工厂?

android - 在 cordova 内打开适用于 ios、android 和 windows 的外部应用程序

android - 从 Android 应用发起 CSD 数据调用

java - 尝试使用 ical4j 解析 ical 文件,说明属性后出现换行问题

python - 如何在 PyCharm 中禁用添加相对路径?

android - 你如何让 Idling 资源在 Kotlin 中与协程一起工作