'Android tests BuildConfig field

Suppose my build.gradle file defines different values for the same variable that is defined in BuildConfig:

android {
    def INTEGER= "integer"
    def VARIABLE = "variable"
    buildTypes {
        release {
            buildConfigField BOOLEAN, VARIABLE, "1"
        }

        debug {
            buildConfigField BOOLEAN, VARIABLE, "2"
        }
    }
}

I would like to define BuildConfig value for this variable for androidTest (the one that is created in app/build/generated/source/buildConfig/androidTest/debug/{app_id}/test/BuildConfig.java)

Now, the value is the same as in debug closure.

Is it possible to change it?



Solution 1:[1]

I found a way to do this here

Create another buildType (whose name must not start with: test) and pass it's name to property:

android {

    testBuildType "staging"

    def INTEGER= "integer"
    def VARIABLE = "variable"
    buildTypes {

        debug {
            buildConfigField BOOLEAN, VARIABLE, "2"
        }

        staging {
            initWith(buildTypes.debug)
            buildConfigField BOOLEAN, VARIABLE, "4"
        }
    }
}

Tests must be run against staging buildType.

Solution 2:[2]

The Kotlin DSL equivalent of the above solution would be this:

android {
  buildTypes {
    create("local") {
      initWith(buildTypes["debug"])
      buildConfigField("Boolean", "IS_CI", "${System.getenv("CI") == "true"}")
      isDebuggable = true
    }
    testBuildType = "local"
  }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 R. Zagórski
Solution 2