FsCheck,我没有让 `Prop.forAll` 工作 (F#)
FsCheck, I am not getting `Prop.forAll` to work (F#)
当我尝试使用 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 个样本,这意味着 none 失败。
我确信我使用的 Prop.forAll
是错误的,但是尽管我通读了所有内容,但还是找不到它。
如果将测试标记为普通 Xunit Fact
(而不是 FsCheck Property
),则必须明确检查 属性:
[<Fact>]
let ``Test Two`` () =
let prop = Prop.forAll (NeverAOne.Data ()) (fun x -> x.value = 1)
Check.QuickThrowOnFailure prop
我得到的结果是:
System.Exception : Falsifiable, after 1 test (0 shrinks) (StdGen (74764374, 296947750)):
Original:
{ value = -2 }
或者您可以将测试标记为 Property
,当然:
[<Property>]
let ``Test Three`` () =
Prop.forAll (NeverAOne.Data ()) (fun x -> x.value = 1)
当我尝试使用 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 个样本,这意味着 none 失败。
我确信我使用的 Prop.forAll
是错误的,但是尽管我通读了所有内容,但还是找不到它。
如果将测试标记为普通 Xunit Fact
(而不是 FsCheck Property
),则必须明确检查 属性:
[<Fact>]
let ``Test Two`` () =
let prop = Prop.forAll (NeverAOne.Data ()) (fun x -> x.value = 1)
Check.QuickThrowOnFailure prop
我得到的结果是:
System.Exception : Falsifiable, after 1 test (0 shrinks) (StdGen (74764374, 296947750)):
Original:
{ value = -2 }
或者您可以将测试标记为 Property
,当然:
[<Property>]
let ``Test Three`` () =
Prop.forAll (NeverAOne.Data ()) (fun x -> x.value = 1)