【发布时间】:2021-11-25 23:37:19
【问题描述】:
当我尝试使用 Prop.forAll 时,我无法正确使用 FsCheck。
我创建了两个测试来证明我在做什么,预计它们都会失败。
type Data = { value: int }
type NeverAOne =
static member Data () =
Arb.generate<int>
|> Gen.filter (fun x -> x <> 1)
|> Gen.map (fun x -> { value = x })
|> Arb.fromGen
[<Property(Arbitrary = [| typeof<NeverAOne> |] )>] (* Fails *)
let ``Test One`` (x: Data) =
x.value = 1
[<Fact>]
let ``Test Two`` () = (* Passes *)
Prop.forAll (NeverAOne.Data ()) (fun x -> x.value = 1)
在此示例中,测试二 通过。如果我添加断点,我可以看到是因为没有生成数据,所以它迭代了0个样本,这意味着没有失败。
我确信我使用 Prop.forAll 错误,但是尽管我已经阅读了所有内容,但我找不到它。
【问题讨论】:
-
我指的是这篇博文,但我仍然看不到我做错了什么。 blog.ploeh.dk/2015/09/08/ad-hoc-arbitraries-with-fscheckxunit