【问题标题】:Android: Add separate resources for tests onlyAndroid:仅为测试添加单独的资源
【发布时间】:2020-12-04 03:45:00
【问题描述】:

我正在开发一个 android 库。

库接受一些参数。例如,它有一个 setStyle 方法,它接受对样式资源的引用:

fun setStyle(@StyleRes style: Int) ...

我想测试这个方法。为此,我想在单元测试中将资源 TestStyle 传递给库。像这样的:

myLibrary.setStyle(R.style.TestStyle)

但是,我不想在主 src/main/res/values/styles.xml 中创建 TestStyle 资源,因为这会使使用我的库的人可以使用该资源。我希望它只在测试中可用。

相反,我尝试将TestStyle <item /> 放在src/test/res/values/styles.xml 的一个新的仅测试文件中。但是,我不知道如何在单元测试中访问它,因为它不能通过 R 获得。

如何创建只能在测试中访问而不能在代码的其他部分访问的资源?

【问题讨论】:

  • 在您的应用程序的调试风格中添加资源。这将不适用于您发布的库。否则我看不到满足您要求的方法
  • @alokHarman 嗯,这是个好主意,我会用它作为临时解决方案。
  • @alokHarman 这将适用于调试单元测试,但发布单元测试将失败。所以,如果你从命令行运行“gradlew test”,它会失败。

标签: android unit-testing testing tdd


【解决方案1】:

将您的资源放在某个文件夹中。例如“src/test/res”。并使用以下 gradle 配置:

android {
...
  testOptions {
        unitTests.includeAndroidResources = true
    }
}

tasks.withType(Test) {
    android.sourceSets.main.res.srcDirs += 'src/test/res'
}

这样,调试和发布测试版本可以看到资源,但不会将它们打包到您的库或应用中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多