3

我正在尝试采用 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);
    }
4

1 回答 1

3

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

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

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

这只是一种安全网,因此测试时间不会膨胀,或者测试完全卡住。

顺便说一句,这里对此进行了解释:https ://fscheck.github.io/FsCheck/Properties.html#Conditional-Properties和一个 C# 示例。

于 2017-02-02T08:50:51.613 回答