Для чтения из файла json в папке resources
папки test
я использую
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
вместо test-shared
, и используете implementation
и добавляете этот модуль в другие модули, используя testImplementation(project(".."))
, если вы используете testImplementation
вместо implementation
, вы получаете неразрешенную ссылку ошибку из тестов, например, в модуле data
.
Зависимости в test-utils
модуле build.gradle.kts
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))
Однако при таком подходе я не могу читать из файла json, расположенного в папке resources
внутри test
папки и получить исключение нулевого указателя. Кроме того, нельзя использовать папку assets
, так как этот файл требуется в модульных тестах? Есть ли способ добавить файл json, не помещая его в папку ресурсов в каждом модуле?