Android测试BuildConfig字段

10
假设我的build.gradle文件定义了与BuildConfig中相同变量的不同值:
android {
    def INTEGER= "integer"
    def VARIABLE = "variable"
    buildTypes {
        release {
            buildConfigField BOOLEAN, VARIABLE, "1"
        }

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

我希望为androidTest定义这个变量的BuildConfig值(在app/build/generated/source/buildConfig/androidTest/debug/{app_id}/test/BuildConfig.java中创建的那个)。

现在,该值与debug闭包中的值相同。

是否可以更改它?

2个回答

13

我在这里找到了一种方法

创建另一个buildType(其名称不能以test开头),然后将其名称传递给属性:

android {

    testBuildType "staging"

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

        debug {
            buildConfigField BOOLEAN, VARIABLE, "2"
        }

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

必须针对 staging buildType 进行测试。


1
如果我不想创建新的buildType,但仍然想为androidTest定义buildConfigField怎么办?对我来说,创建新的buildType并不是解决方案... - Mkr
如果您的应用程序是多模块的,您可能会遇到此错误:“无法解析依赖项':currentModule@staging/compileClasspath':无法解析项目:otherModule。”为了解决这个问题,只需转到 otherModule 的 build.gradle,并在 buildTypes 中添加一个 staging {} 条目即可。 - sudocoder
测试必须针对暂存 buildType 运行 - 这句话的意思不是很清楚。我发现你需要将构建变体更改为“staging”,更多信息请参见 https://dev59.com/ilcP5IYBdhLWcg3wd5um。 - sudocoder

1

以上解决方案的Kotlin DSL等效代码如下:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接