如何从与其他模块共享的测试模块中的json文件读取?

时间:2020-08-03 09:00:04

标签: android unit-testing gradle-kotlin-dsl

要使用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,该模块将在其他模块中使用,以防止出现相同的样板代码。

我看到的问题是检查其他项目时发现您没有使用testImplementationandroidTestImplementation向此模块添加依赖项,而是将文件放到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文件而不将其放在每个模块的资源文件夹中?

0 个答案:

没有答案