Макет BuildConfigField для модульного тестирования в Котлине - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь охватить как можно больше библиотеки 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)
}

Я пробовал разные вещи, и это никогда не работает. Если кто-то уже проделал эту работу, она может мне сильно помочь (и другим, я думаю).

Спасибо

...