8

我有一个类型Average,其字段count为正数int64double字段名为sum.

我做了一个任意生成有效实例的

 let AverageGen = Gen.map2 (fun s c -> Average(float(s),int64(int(c))) (Arb.Default.NormalFloat().Generator)  (Arb.Default.PositiveInt().Generator) |> Arb.fromGen

如何Property在 xUnit 的样式测试中生成具有平均类型的参数?

[<Property>]
static member average_test(av:Average) = ...
4

2 回答 2

9
type Generators =
    static member TestCase() =
        { new Arbitrary<TestCase>() with
            override x.Generator =
                gen { ...
                      return TestCase(...) }}

[<Property(Arbitrary=[|typeof<Generators>|])>]
于 2014-03-28T18:16:52.717 回答
5

我认为 Vasily Kirichenko 的解决方案是正确的,但为了完整起见,我还能够使其与这种命令式函数调用风格一起工作:

do Arb.register<Generators>() |> ignore

...如果您Generators像瓦西里·基里琴科(Vasily Kirichenko)的回答那样上课。


编辑,很久以后...

虽然上述命令式方法可能有效,但我从不使用它,因为它的性质不纯。相反,我有时会直接在 test 中使用 Arbitrary。使用AverageGen上面的值(我将重命名为averageGen,因为值应该是驼峰式的),它可能看起来像这样:

[<Property>]
let member average_test () =
    Prop.forAll averageGen (fun avg ->
        // The rest of the test goes here... )
于 2014-03-28T19:33:11.800 回答