问题描述
我正在开发一个android库。
该库接受一些参数。例如,它具有setStyle方法,该方法接受对样式资源的引用:
fun setStyle(@StyleRes style: Int) ...
我想测试这种方法。为此,我想在单元测试中将资源TestStyle
传递给库。像这样:
myLibrary.setStyle(R.style.TestStyle)
但是,我不想在主TestStyle
中创建src/main/res/values/styles.xml
资源,因为这会使使用我的图书馆的人可以使用该资源。我希望它仅在测试中可用。
相反,我尝试将TestStyle
<item />
放置在src/test/res/values/styles.xml
的新的仅测试文件中。但是,我无法弄清楚如何在单元测试中访问它,因为它无法通过R获得。
如何创建只能在测试中访问的资源,而在代码的其他部分却不能访问?
解决方法
将您的资源放在某个文件夹中。例如“src/test/res”。并使用以下 gradle 配置:
android {
...
testOptions {
unitTests.includeAndroidResources = true
}
}
tasks.withType(Test) {
android.sourceSets.main.res.srcDirs += 'src/test/res'
}
这样,调试和发布测试版本的资源将可见,但它们不会打包到您的库或应用中。