要使用resources
文件夹的test
文件夹中的json文件进行读取,我使用
sourceSets {
val sharedTestDir = "src/test-shared/java"
getByName("test") {
java.srcDir(sharedTestDir)
}
getByName("androidTest") {
java.srcDir(sharedTestDir)
resources.srcDir("src/test/resources")
}
}
在测试共享文件夹中,我使用扩展功能将json文件转换为对象
fun getResourceAsText(path: String): String {
return object {}.javaClass.classLoader!!.getResource(path)!!.readText()
}
inline fun <reified T> convertToObjectFromString(input: String): T? {
return Gson().fromJsonWithType<T>(input)
}
inline fun <reified T> Gson.fromJsonWithType(json: String): T? =
fromJson<T>(json, object : TypeToken<T>() {}.type)
我创建了一个测试模块test-utils
,该模块将在其他模块中使用,以防止出现相同的样板代码。
我看到的问题是检查其他项目时发现您没有使用testImplementation
或androidTestImplementation
向此模块添加依赖项,而是将文件放到main
文件夹而不是{{ 1}}文件夹,并使用test-shared
并使用implementation
将此模块添加到其他模块,如果使用testImplementation(project(".."))
而不是testImplementation
,则会得到未解决的引用测试中的错误,例如implementation
模块中的错误。
data
模块build.gradle.kts中的依赖项
test-utils
通过{p>将dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
implementation(Deps.KOTLIN)
implementation(Deps.ANDROIDX_CORE_KTX)
implementation(Deps.RX_JAVA)
implementation(Deps.RX_ANDRIOD)
implementation(Deps.COROUTINES_CORE)
implementation(Deps.COROUTINES_ANDROID)
implementation(TestDeps.ANDROIDX_CORE_KTX)
implementation(TestDeps.ANDROIDX_CORE_TESTING)
implementation(Deps.GSON)
}
模块作为项目添加到test-utils
模块中
data
但是,通过这种方法,我无法读取位于testImplementation(project(Modules.AndroidLibrary.TEST_UTILS))
文件夹内resources
文件夹中的json文件,并且无法获取空指针异常。另外,由于单元测试中需要此文件,因此也不能使用test
文件夹吗?无论如何,有没有添加json文件而不将其放在每个模块的资源文件夹中?