语言: Kotlin JDK:1.8.0_162 JUnit 5:5.2.0
尝试对大型数据集进行测试,并将以下伪代码作为我们的框架。是否有一种受支持的方式来将测试数据流式传输进来?测试数据为 4GB,因此无法将其作为数组返回。
data class BigData(val id: Int, val bytes: ByteArray)
@TestFactory
fun TestIt() = getTestData()
.map { (id, bytes) ->
DynamicTest.dynamicTest("DataId: $id") {
var valid = DoSomethingWithLargeData(bytes)
Assertions.assertEquals(true, valid)
}
}
fun getTestData() = buildSequence {
val inputStream = File(largeData).inputStream()
inputStream.bufferedReader().useLines { lines ->
lines.forEach {
val parts = it.split(',')
val id = parts[0].toInt()
val bytes = decoder.decode(parts[1])
yield(BigData(id, bytes))
}
}
}
上面的代码出现以下错误
“引起:org.junit.platform.commons.util.PreconditionViolationException:无法将 kotlin.sequences.TransformingSequence 的实例转换为流:kotlin.sequences.TransformingSequence@36a11785”
最佳答案
当然,在我发布问题之后,我就弄明白了。 😠
@TestFactory
fun TestIt() : Iterator<DynamicTest> {
return getTestData
.map { (id, bytes) ->
DynamicTest.dynamicTest("DataId: $id") {
var valid = DoSomethingWithLargeData(bytes)
Assertions.assertEquals(true, valid)
}
}.iterator()
}
错误有点确实告诉你出了什么问题,这让我试图提供它所要求的。
“TestIt() 必须返回 org.junit.jupiter.api.DynamicNode 的 Stream、Collection、Iterable 或 Iterator”
此外,他们的文档擅长展示工作动态测试的示例
https://junit.org/junit5/docs/current/user-guide/#writing-tests-dynamic-tests
我希望这对其他人有帮助。
关于java - JUnit 5 测试工厂迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50415706/