我正在使用MockWebServer进行测试。
而且我需要大量的JSON文件来存放请求和响应数据。
硬编码的json值看起来很乱,我想创建json文件。
所以,我在资源(测试)中创建了json文件,并尝试用这些方法读取文件。
object TestHelper {
fun read(fileName: String): String {
val resource = javaClass.classLoader?.getResource(fileName)
return resource?.readText() ?: ""
}
fun readJson(fileName: String): String {
val byteArray = readBinaryFileFromResources(fileName)
val sb = StringBuilder("")
byteArray.forEach {
println("byte: $it")
sb.append(it as Char)
}
return sb.toString()
}
@Throws(IOException::class)
fun readBinaryFileFromResources(fileName: String): ByteArray {
var inputStream: InputStream? = null
val byteStream = ByteArrayOutputStream()
try {
inputStream = javaClass.classLoader?.getResourceAsStream(fileName)
var nextValue = inputStream?.read() ?: -1
while (nextValue != -1) {
byteStream.write(nextValue)
nextValue = inputStream?.read() ?: -1
}
return byteStream.toByteArray()
} catch (e: Exception) {
println(e.stackTraceToString())
return byteStream.toByteArray()
} finally {
inputStream?.close()
byteStream.close()
}
}
}
没有一个看起来能用。这个代码有什么问题?
1条答案
按热度按时间30byixjq1#
我以前遇到过这样的问题,我相信这与从调用点获取正确的
classLoader
有关,也与src/test/resources
中的资源不能被正确访问有关。我最终通过将调用测试类作为一个具体化的类型参数传入来使它工作:对于我的设置,我有一个单独的共享模块
:testtools
,我使用testImplementation
将其包含在我的:app
的gradle构建中,这样它们就不会编译到生产APK中。我的测试资源位于:然后从
:app
中的一个单元测试类调用它,如下所示:你可能会有一些运气,把你的资源直接到
/app/src/test/resources/customfolder
,我还没有尝试在一段时间。