FsCheck c# When 属性 组合子

FsCheck c# When property combinator

我正在尝试采用 fscheck,但由于没有太多 C# 文档,所以遇到了很多困难。您能解释一下,为什么以下使用 When 组合器的示例会失败(显然,我不明白如何正确使用它)?

 [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);
    }

它实际上并没有真正失败,它只是说 "Arguments exhausted after n tests"。

当您使用 When 时,FsCheck 会跟踪有多少生成值因不满足 When 中给出的条件而不得不丢弃。默认情况下,这是 1000 个值。

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

它只是一种安全网,所以测试时间不会膨胀,或者测试完全停滞不前。

顺便说一句,这在此处进行了解释:https://fscheck.github.io/FsCheck/Properties.html#Conditional-Properties 使用 C# 示例。