gpt4 book ai didi

testing - 强制 FsCheck 生成 NonEmptyString,用于区分字符串类型的联合字段

转载 作者:行者123 更新时间:2023-11-28 19:46:03 24 4
gpt4 key购买 nike

我正在尝试使用 FsCheck 实现以下行为:我想创建一个生成器,它将生成一个 MyUnion 类型的实例,每个字符串字段都是非空/空的。

type MyNestedUnion =
| X of string
| Y of int * string

type MyUnion =
| A of int * int * string * string
| B of MyNestedUnion

我的“真实”类型比 MyUnion 更大/更深,并且 FsCheck 能够毫无问题地生成实例,但联合案例的字符串字段有时为空。 (例如,它可能会生成 B (Y (123, "")))

也许有一些明显的方法可以结合 FsCheck 的 NonEmptyString 及其对生成我缺少的任意联合类型的支持?

非常感谢任何正确方向的提示/指示。

谢谢!

最佳答案

这违背了基于属性的测试的原则(因为您明确阻止生成有效的测试用例),但您可以连接非空字符串生成器以用于所有字符串:

type Alt =
static member NonEmptyString () : Arbitrary<string> =
Arb.Default.NonEmptyString()
|> Arb.convert
(fun (nes : NonEmptyString) -> nes.Get)
NonEmptyString.NonEmptyString

Arb.register<Alt>()

let g = Arb.generate<MyUnion>

Gen.sample 1 10 g

请注意,您需要在测试后重新注册默认生成器,因为映射是全局的。

一个更循规蹈矩的解决方案是使用默认派生生成器,然后过滤包含无效字符串的值(即使用 ==>),但您可能会发现它不可行特别是深层嵌套类型。

关于testing - 强制 FsCheck 生成 NonEmptyString,用于区分字符串类型的联合字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45694266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com