提问人:Kalle Richter 提问时间:11/17/2023 更新时间:11/17/2023 访问量:47
如何为 Kotlin 测试生成真实世界的文本数据?
How to generate real world text data for Kotlin Tests?
问:
我正在使用 Kotest 数据生成器进行测试,这些测试非常灵活,几乎可以做任何事情。然而,字符串生成器技术性很强,很难用它们生成现实世界的文本字符串。
例如,生成带有可打印 ASCII 字符 ( 到 ) 的字符串是相当遥远的真实用例,即使从真实世界的 ASCII 输入也是如此,因为不包含换行符和制表符。在现实世界中,可以在具有各种语言设置的浏览器中创建各种 UTF-8 字符。
~
Kotest 中有生成器,但它使用的是 RxGen 1.4,它尚不支持基于 Character 类的生成(版本 1.5 正在等待中)。否则我会说这是我的想法,但我对 Unicode 字符类一无所知,我觉得这个问题的现有解决方案比自己弄清楚要好得多。stringPattern
[\p{Punct}]|[\p{Graph}]|[\p{Print}]|[\p{Blank}]
我在 Kotlin 1.9 项目中使用 Kotest 5.8.0。
答:
0赞
AndrewL
11/17/2023
#1
如果 Lorem Ipsum 可以作为现实世界的文本为您传递,这很容易使用:
val lorem: Lorem = LoremIpsum(seed)
// generates between 2 and 4 paragraphs:
val text = lorem.getParagraphs(2, 4)
<dependency>
<groupId>com.thedeanda</groupId>
<artifactId>lorem</artifactId>
</dependency>
来源: https://github.com/mdeanda/lorem
0赞
johanneslink
11/20/2023
#2
另一种选择是使用 jqwik 的字符串生成器。它们可以在 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 的主要提交者
评论