简述:我无法在C#中成功地使用FsCheck和NUnit进行测试:
- 它告诉我在stdout上测试失败,但测试结果仍然是绿色的
- 它告诉我找不到任何要运行的测试
- 或者我不知道如何应用我阅读的文档在C#中
我认为一个完整的示例会有所帮助...
(更多细节)
第一步:测试仍然是绿色的
我安装了Nuget包 FsCheck.NUnit
(2.10.4),并尝试了如下操作:
[NUnit.Framework.Test]
public void SomeTest()
{
// Note the subtle bug: I Reverse only once, because I want the test to fail
Func<int[],bool> revRevIsOrig = xs => xs.Reverse().SequenceEqual( xs );
Prop.ForAll(revRevIsOrig).QuickCheck();
}
当我像运行任何 NUnit 测试一样运行它时,它最终是绿色的,即使我在标准输出上看到了。
Falsifiable, after 3 tests (1 shrink) (StdGen (2129798881,296376481)):
Original:
[|-1; 0|]
Shrunk:
[|1; 0|]
第二步:测试结果不确定
接着我查找了一些文档并发现应该使用Property
而非Test
。因此,我将代码修改为:
[FsCheck.NUnit.Property] // <-- the line that changed
public void SomeTest()
{
Func<int[],bool> revRevIsOrig = xs => xs.Reverse().SequenceEqual( xs );
Prop.ForAll(revRevIsOrig).QuickCheck();
}
我从Visual中启动了测试,但最终状态显示为“不确定(inconclusive)”。
无法运行测试:在'xxx.exe'中未找到合适的测试。要么程序集中不包含测试,要么没有找到适当的测试驱动程序
第三步:我注意到我没有理解文档
当我重新阅读文档时,发现它说我的测试方法可以接受参数并应该返回一个属性。但是,显然我没有这样做,因为我什么也没有返回。
可悲的是,我不明白我实际上应该做什么(而且我对F#不太熟悉,也看不懂下面的示例...)...(我已经盲目尝试了一些看起来有道理的东西,但从来没有得到过红色的测试结果)
如果能给我任何帮助,让我让这个测试变成红色,我将不胜感激!
Prop.ForAll(revRevIsOrig).QuickCheckThrowOnFailure();
。 - Nkosi