如何为Kotlin测试生成真实的世界文本数据?

23c0lvtd  于 2023-11-21  发布在  Kotlin
关注(0)|答案(2)|浏览(174)

我使用Kotest data generators进行测试,它非常灵活,几乎可以做任何事情。然而,字符串生成器非常技术性,很坚韧用它们生成真实的文本字符串。
例如,使用可打印的ASCII字符(``到~)生成字符串与真实的世界的用例相差甚远,甚至与真实的世界的ASCII输入也相差甚远,因为没有包含换行符和制表符。在真实的真实的世界中,可以在具有各种语言设置的浏览器中创建各种UTF-8字符。
在Kotest中有stringPattern生成器,但它使用RxGen 1.4,RxGen 1.4还不支持基于字符类的生成(1.5版正在等待中)。否则我会说[\p{Punct}]|[\p{Graph}]|[\p{Print}]|[\p{Blank}]是我的想法,但我对Unicode字符类一无所知,我觉得现有的解决方案比自己解决这个问题要好得多。
我在一个Kotlin1.9的项目中使用Kotest 5.8.0。

gj3fmq9x

gj3fmq9x1#

如果存有可以通过作为真实的世界文本为你,这是很容易用途:

val lorem: Lorem = LoremIpsum(seed)

// generates between 2 and 4 paragraphs:
val text = lorem.getParagraphs(2, 4)

个字符
来源:https://github.com/mdeanda/lorem

sdnqo3pr

sdnqo3pr2#

另一个选择是使用jqwik的String生成器。它们可以在jqwik属性方法之外使用。
下面是一个例子:

import io.kotest.core.spec.style.FunSpec
import net.jqwik.api.Arbitraries

class KotlinTests : FunSpec({

    test("my first test") {
        Arbitraries.strings().ofLength(10).sampleStream()
            .limit(10)
            .forEach { println(it) }
    }

})

字符串
如何直接使用jqwik的生成器(又称仲裁器)在用户指南的这一部分有详细说明。
完全披露:我是jqwik的主要提交者

相关问题