java - JUnit 5 测试工厂迭代器

标签 java performance kotlin junit5

语言: 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/

相关文章:

C 内在效率 - 哪个更好?

MySql 查询 : really never use SELECT *?

android - 使对话框宽度为全屏

kotlin - 如何在Kotlin中定义Long Long数据类型?

java - 双值的全局和静态数组

java - 多个 SwingNode 导致极度性能下降

java - 通过hibernate插入2.对象后出现Hsql错误

java - yyyy-mm-dd 的正则表达式日期验证

c++ - 64 位模运算的奇怪性能行为

java - fragment 标签的使用