当前位置:  开发笔记 > 编程语言 > 正文

如果随机生成的输入无效,我该如何重新尝试基于属性的测试?

如何解决《如果随机生成的输入无效,我该如何重新尝试基于属性的测试?》经验,为你挑选了1个好方法。

我是单元测试的n00b.我已经安装FsCheck.Nunit,并NUnitTestAdapter从的NuGet,我试图做基于属性的测试,主要是由灵感不可估量的斯科特Wlaschin.

我正在使用该[]属性,我希望能够"跳过"不符合测试要求的输入:

[]
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#类型(有区别的联合等)生成随机输入而无需额外的工作.



1> Mark Seemann..:

你应该可以做这样的事情:

open FsCheck
open FsCheck.Xunit

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

第一行是布尔条件,==>FsCheck模块定义的自定义运算符.如果右侧的条件评估为,则仅强制评估惰性表达式true.

但是,请考虑重构此测试,以使其不依赖于文件系统.文件系统是持久的,因此自动创建持久性夹具​​,管理起来很麻烦 ; 并非不可能处理,但最好避免.

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

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有