gpt4 book ai didi

c# - FsCheck 与 C# 中的 NUnit 集成

转载 作者:行者123 更新时间:2023-11-30 13:54:05 25 4
gpt4 key购买 nike

TL;DR:我无法在 C# 中成功地将 FsCheck 与 NUnit 结合使用:要么:

  • 它在标准输出上告诉我测试失败但测试仍然显示为绿色
  • 它告诉我它没有找到任何要运行的测试
  • 或者我不明白如何在 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|]

第二步:测试无定论

所以我继续,找到了一些 doc ,并注意到我应该使用 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。一些日志告诉我:

Cannot run tests: No suitable tests found in 'xxx.exe'. Either assembly contains no tests or proper test driver has not been found

第 3 步:我注意到我不理解文档

当我重新阅读文档时,我注意到它说我的测试方法可以接受参数并且应该返回一个属性。我显然没有这样做,因为我什么也没返回。

可悲的是,我不明白我实际上应该做什么(而且我对 F# 不够熟悉,无法理解下面的示例...)...(我盲目地尝试了一些随机的东西看起来很有意义,但我从来没有以红色测试结束)

我真的很感激任何能帮助我让这个测试变红的指示!

最佳答案

尝试使用 QuickCheckThrowOnFailure 函数

the QuickThrowOnFailure ensures that if the test fails, an exception with the necessary information is raised so the runner know the test failed.

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

关于c# - FsCheck 与 C# 中的 NUnit 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47312510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com