gpt4 book ai didi

.net - 如果随机生成的输入没有用,我如何重新尝试基于属性的测试?

转载 作者:行者123 更新时间:2023-12-04 14:42:15 28 4
gpt4 key购买 nike

我是单元测试的n00b。我已经安装了FsCheck.NunitNUnitTestAdapter来自 Nuget,我正在尝试进行基于属性的测试,很大程度上受到 the inestimable Scott Wlaschin 的启发.

我正在使用 [<Property>]属性,我希望能够“跳过”不符合测试要求的输入:

[<Property(MaxTest=10)>]
let ``Calling unzipTo with an invalid destination will yield a failure.`` badDest =
if Directory.Exists(badDest)
then // somehow skip to the next randomized input
else // do the actual test

最简单的方法是什么?

如果 FsCheck/NUnit 存在,我更喜欢它的答案,但我也会考虑其测试可以在 Visual Studio 中运行的任何其他框架。 (我以为我看到了一些框架,其中有一个简单的函数可以做到这一点,但我不知道它是什么。)

到目前为止,我更喜欢 FsCheck.NUnit,因为它可以为 F# 类型(可区分联合等)生成随机输入,而无需额外的工作。

最佳答案

你应该能够做这样的事情:

open FsCheck
open FsCheck.Xunit

[<Property(MaxTest=10)>]
let ``Calling unzipTo with an invalid destination will yield a failure.`` badDest =
(not Directory.Exists(badDest)) ==> lazy
// do the actual test

第一行是一个 bool 条件, ==>是由 FsCheck 定义的自定义运算符模块。如果右侧的条件评估为 true,它只会强制评估惰性表达式.

但是,请考虑重构此测试,使其不依赖于文件系统。文件系统是持久化的,因此会自动创建一个持久化 Fixture,即 a lot of trouble to manage ;不是不可能处理,但最好避免。

此示例使用 FsCheck.Xunit,但 IIRC FsCheck.Nunit 的工作方式相同。不过,您应该认真考虑使用 FsCheck.Xunit 而不是 FsCheck.Nunit。 NUnit 2 的可扩展性模型非常差,这意味着大多数试图扩展 NUnit 的 Glue 库都会遇到很多问题。这不是 FsCheck.Nunit 的问题,而是 NUnit 本身的问题,但它会给您带来很多麻烦。

关于.net - 如果随机生成的输入没有用,我如何重新尝试基于属性的测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34656721/

28 4 0