我正在尝试全面涵盖一个Kotlin Android库,并遇到了有关自定义BuildConfig变量的问题,通常称为buildConfigField
。
我想模拟这个变量以测试true
和false
值。
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)
}
我尝试了不同的方法,但从未成功。如果有人已经完成了这项工作,它可以帮助我很多(我想也会帮助其他人)。
谢谢
BuildConfig.ENABLE_LOG
作为参数发送到您的函数中?这样,您可以通过调用buildClient(enableLog: Boolean)
来模拟测试。或者,在包含该函数的类的构造函数中发送它以将其拉入类级别?或者使用依赖注入将变量注入到您的类中? - Usama K. Zafar