我正在尝试尽可能多地覆盖 Kotlin Android库,并且遇到有关自定义BuildConfig变量(通常称为buildConfigField
)的问题。
我想模拟此变量以测试true
和false
的值。
android {
defaultConfig {
buildConfigField "boolean", "ENABLE_LOG", "false"
}
flavorDimensions "log"
productFlavors {
loggable {
buildConfigField "boolean", "ENABLE_LOG", "true"
dimension "log"
}
notloggable {
dimension "log"
}
}
}
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)
}
我尝试了不同的方法,但从未成功。 如果有人已经完成了这项工作,它可以对我有很大帮助(我猜还有其他人)。
谢谢
答案 0 :(得分:1)
ReflectionHelpers.setStaticField(BuildConfig::class.java, "ENABLE_LOG", true)
答案 1 :(得分:0)
默认情况下,所有测试都针对调试构建类型运行。您可以使用模块级 build.gradle 文件中的 testBuildType 属性将其更改为另一种构建类型。例如,如果您想针对您的“暂存”构建类型运行测试,请按以下代码段所示编辑文件。
安卓{ ... testBuildType“暂存” } 但这导致其他选项失败