- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
FsCheck 有一些简洁的默认值 Arbitrary
类型来生成测试数据。但是,如果我的一个考试日期取决于另一个考试日期怎么办?
例如,考虑 string.Substring()
的属性结果子字符串永远不能比输入字符串长:
[Fact]
public void SubstringIsNeverLongerThanInputString()
{
Prop.ForAll(
Arb.Default.NonEmptyString(),
Arb.Default.PositiveInt(),
(input, length) => input.Get.Substring(0, length.Get).Length <= input.Get.Length
).QuickCheckThrowOnFailure();
}
虽然执行Substring
当然是正确的,这个属性失败了,因为最终一个PositiveInt
将生成比生成的 NonEmptyString
更长的导致异常。
Shrunk: NonEmptyString "a" PositiveInt 2 with exception: System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.
我可以保护与 if (input.Length < length) return true;
的比较但那样的话,我最终会进行大量的测试运行,甚至都没有检查该属性。
如何告诉 FsCheck 只生成 PositiveInt
s 不超过输入字符串?我想我必须使用 Gen<T>
类,但它的界面让我很困惑...我尝试了以下但仍然得到 PositiveInt
s 超出字符串:
var inputs = Arb.Default.NonEmptyString();
// I have no idea what I'm doing here...
var lengths = inputs.Generator.Select(s => s.Get.Length).ToArbitrary();
Prop.ForAll(
inputs,
lengths,
(input, length) => input.Get.Substring(0, length).Length <= input.Get.Length
).QuickCheckThrowOnFailure();
最佳答案
您可以使用 SelectMany
创建依赖于从另一个生成的值的生成器。这也允许您使用 LINQ 查询语法,例如
var gen = from s in Arb.Generate<NonEmptyString>()
from i in Gen.Choose(0, s.Get.Length - 1)
select Tuple.Create(s, i);
var p = Prop.ForAll(Arb.From(gen), t =>
{
var s = t.Item1.Get;
var len = t.Item2;
return s.Substring(0, len).Length <= s.Length;
});
Check.Quick(p);
关于c# - FsCheck:如何生成依赖于其他测试数据的测试数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46836197/
我有以下代码: var gen = from x in Arb.Generate() from int y in Gen.Choose(5, 10) where x > 5 select new tu
总结 是否有任何事件可以在每个属性案例之前运行,以便我可以为属性的每次运行运行设置和拆卸? 完整版 我希望能够使用属性测试配对行为,例如“我总是可以获取书面记录”或“readAllLines 的输出等
我的代码在使用 FsCheck 时会自动测试从 -99 到 99 的值。 Check.Quick test 我的测试函数采用整数值。 我想使用 1 到 4999 之间的值进行测试。 最佳答案 您可以使
FsCheck 有一些简洁的默认值 Arbitrary类型来生成测试数据。但是,如果我的一个考试日期取决于另一个考试日期怎么办? 例如,考虑 string.Substring() 的属性结果子字符串永
我似乎经常遇到这样的情况,我想生成一些复杂的结构,但生成的成员类型的特殊变体却不同。 例如,考虑这棵树 type Tree = | LeafNode of 'LeafData | In
我有一个 FsCheck题: 我有以下记录类型(我事先说过,有人告诉我我的单例 DU 可能有点矫枉过正,但我发现它们描述了域,因此是必要的,除非必须,否则我不会删除它们): type Name =
我有一个函数可以在一个范围内生成 double : let gen_doublein = fun mx mn -> Arb.generate |> Gen.suchThat ( (>) mx
我最初尝试创建一个固定前 5 个元素的生成器(并且在使用 Prop.forAll 的任何测试中,前五个总是会运行),但失败了。 现在我试图通过一个范围内的随机数据生成器和一个非随机数据的生成器(即固定
有没有办法通过从每个字符串列表中只选择一个项目然后连接结果来在 FsCheck 中生成一个字符串? 我只是完全卡住了,似乎无法弄清楚。我看过 docs并在 github repo 类似的东西。我从 F
我正在尝试对此功能进行测试 let extract_one_rule (rule:Rule.t) = let rec expand = function |PAlt (a,b)
我想使用 FsCheck(与 XUnit)创建类型的记录:type QueryRequest = {Symbol: string; StartDate: DateTime; EndDate: Date
我设法得到xUnit处理我的小样本组装。现在我想看看我能不能摸索FsCheck也。我的问题是在为我的函数定义测试属性时我很困惑。 也许我只是没有一个好的函数样本集,但是例如,这些函数的好的测试属性是什
是否可以使用 fscheck 生成数据,特别是列表,以便在 fscheck 之外使用?我无法在 fscheck 测试中调试比较结果看起来相等的情况,但 fscheck 说它们不相等。 我有这个对象列表
我正在 VisualStudio 中使用 FsCheck 和 NUnit 进行测试。 当前的问题是:我设法生成随机图(用于测试某些图功能),但是当测试失败时,FsCheck 会吐出整个图,并且它不使用
我想测试一个属性,我使用 2 个概率 p1 和 p2 必须满足 0 ) = (p1 0.0 && p1 0.0 && p2 0) ==> (lazy ( let bf1
我使用 FsCheck 进行基于属性的测试,因此我为自定义类型定义了一组生成器。有些类型由其他类型组成,并且所有类型都有生成器。为字母数字类型定义了一个生成器后,我想为 RelativeUrl 类型定
我正在编写一个 FSCheck 生成器来创建具有以下属性的字符串: 它们是非空的 修剪它们不会影响长度 它们不包含空格。 这是我的生成器代码: namespace Example open FsChe
如何使用 FsCheck 实现多参数生成? 我实现了以下内容以支持多参数生成: // Setup let pieces = Arb.generate |> Gen.filter (isKing
我有这样的递归类型: type QueryInfo = { Title : string Check : Client -> bool Positive :
我正在尝试采用 fscheck,但由于没有太多 C# 文档,所以遇到了很多困难。您能解释一下,为什么以下使用 When 组合器的示例会失败(显然,我不明白如何正确使用它)? [Test] p
我是一名优秀的程序员,十分优秀!