F#中FsCheck框架Prop.forAll方法未按预期运行问题排查
问题原因
Prop.forAll仅负责构造属性定义,本身不会自动触发测试样本生成和校验逻辑。你将其直接放在[<Fact>]标注的测试方法中时,没有执行任何实际的校验动作,整个测试方法没有断言也没有报错,所以测试框架默认判定为通过。- 标注了
[<Property>]的Test One能正常执行,是因为FsCheck的测试运行器会自动识别该特性,自动触发属性校验、样本生成的逻辑,不需要手动调用执行方法。
修复方案
需要手动调用FsCheck提供的校验执行方法,例如Check.QuickThrowOnFailure,执行属性校验逻辑,校验失败时会抛出异常被Fact识别为测试失败,修改后的代码如下:
[<Fact>] let ``Test Two`` () = Prop.forAll (NeverAOne.Data ()) (fun x -> x.value = 1) |> Check.QuickThrowOnFailure
补充说明
如果不需要测试直接失败仅需输出校验日志,可以改用Check.Quick方法,该方法只会在控制台输出校验结果不会抛出异常,不会触发Fact测试失败。
内容的提问来源于stack exchange,提问作者JonathanPeel
相关产品推荐
相关产品推荐

