我正在尝试采用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);
}
答案 0 :(得分:2)
它实际上并没有真正失败,它只是说“n次测试后参数耗尽。”
当您使用When
时,FsCheck会跟踪它必须丢弃的生成值的数量,因为它们不满足When
中给出的条件。默认情况下,这是1000个值。
这表明条件过于严格,生成器通常不会生成满足When
条件的值。
这只是一种安全网,所以测试时间不会爆发,或者测试完全被卡住了。
顺便说一下,这里解释一下:https://fscheck.github.io/FsCheck/Properties.html#Conditional-Properties带有C#示例。