FsCheck c#When属性组合符

FsCheck c#When属性组合符,c#,fscheck,C#,Fscheck,我正在尝试采用fscheck,但由于没有太多关于C#的文档,所以很难做到这一点。你能解释一下,为什么下面的例子在属性的combinator失败时使用它(显然,我不知道如何正确使用它) [测试] 公共财产无效 { Prop.ForAll(NotNullString().ToArbitrary(),s=>s.StartsWith(“A”)。When(s.StartsWith(“A”))。VerboseCheckThrowOnFailure(); } 公共Gen NotNullString() { 返

我正在尝试采用fscheck,但由于没有太多关于C#的文档,所以很难做到这一点。你能解释一下,为什么下面的例子在属性的combinator失败时使用它(显然,我不知道如何正确使用它)

[测试]
公共财产无效
{
Prop.ForAll(NotNullString().ToArbitrary(),s=>s.StartsWith(“A”)。When(s.StartsWith(“A”))。VerboseCheckThrowOnFailure();
}
公共Gen NotNullString()
{
返回Arb.Generate(),其中(s=>s!=null);
}

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

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

这表明条件过于严格,当条件足够频繁时,生成器不会生成满足条件的值

它只是一种安全网,所以测试时间不会膨胀,或者测试会完全卡住


顺便说一句,这里解释一下:用一个C#例子。

要求举例被认为是离题的。
 [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);
    }