FsCheck c#当属性组合时

时间:2017-01-31 15:10:04

标签: c# fscheck

我正在尝试采用fscheck,但由于C#没有太多文档,因此非常困难。你能解释一下,为什么下面的使用When combinator属性的例子失败了(显然,我不明白如何正确使用它)?

 [Test]
    public void WherePorperty()
    {
      Prop.ForAll(NotNullString().ToArbitrary(), s=>s.StartsWith("A").When(s.StartsWith("A"))).VerboseCheckThrowOnFailure();
    }

    public Gen<string> NotNullString()
    {
      return Arb.Generate<string>().Where(s => s != null);
    }

1 个答案:

答案 0 :(得分:2)

它实际上并没有真正失败,它只是说“n次测试后参数耗尽。”

当您使用When时,FsCheck会跟踪它必须丢弃的生成值的数量,因为它们不满足When中给出的条件。默认情况下,这是1000个值。

这表明条件过于严格,生成器通常不会生成满足When条件的值。

这只是一种安全网,所以测试时间不会爆发,或者测试完全被卡住了。

顺便说一下,这里解释一下:https://fscheck.github.io/FsCheck/Properties.html#Conditional-Properties带有C#示例。