【发布时间】:2016-04-11 22:28:05
【问题描述】:
我是单元测试的 n00b。我已经从 Nuget 安装了 FsCheck.Nunit 和 NUnitTestAdapter,并且我正在尝试进行基于属性的测试,很大程度上受到 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# 类型(可区分联合等)生成随机输入,而无需额外工作。
【问题讨论】:
-
您需要一个自定义生成器。
-
IIRC 对于 then 语句,您只需返回表明测试成功的结果而不运行测试。像
true这样简单的东西可能会起作用。几年前我遇到了这个问题,问题是过度思考问题。请记住,测试只是一个函数,测试驱动程序只想要一个指示成功或失败的结果,所以给它一个成功。 -
@Guy Coder 问题在于,如果生成的随机输入没有用,我希望使用不同的随机输入重新运行测试——我不希望函数在不合适的情况下运行多次如果它从未实际执行过测试,则输入并声明自己成功。
标签: .net f# nunit fscheck property-based-testing