问题标签 [fscheck]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2756 浏览

c# - 使用 C# 使用 FsCheck 生成随机字符串

我想逐渐将 FsCheck 集成到我的 C# 测试代码中(作为第一步)。

我想随机生成部分输入数据。

这就是我生成随机字符串的方式:

如果我多次调用它,我每次都会得到相同的字符串。

如何每次获得不同的字符串和/或正确编写此代码?

0 投票
1 回答
912 浏览

c# - 使用 FsCheck 进行测试的方法

我正在尝试将范式转变为 FsCheck 和基于随机属性的测试。我有复杂的业务工作流程,其中包含的测试用例比我可能列举的要多,而且业务逻辑是一个不断变化的目标,其中添加了新功能。

背景:匹配是企业资源计划(ERP)系统中非常常见的抽象。订单履行、供应链物流等

示例:给定一个 C 和一个 P,确定两者是否匹配。在任何给定的时间点,一些 P永远无法匹配,而一些 C永远无法匹配。每个人都有一个状态,表明他们是否可以考虑参加比赛。

奖励:除了天真的“块匹配”状态之外,C 和 P 都有一组检查。对于匹配的 C,一些检查必须为真,对于匹配的 P,一些检查必须为真,并且 C 的一些检查必须与 P 的检查进行交叉检查。这就是我怀疑基于模型的地方使用 FsCheck 进行测试将带来巨大的收益,因为 (a) 它是添加到产品中的新功能的示例 (b) 我可以编写测试(用户交互),例如:

  1. 创造
  2. 创建后,通过管道向前移动
  3. 向后移动(何时允许与不允许?例如:付费订单可能无法返回采购批准步骤)
  4. 在管道中间添加/删除东西(如检查)
  5. 如果我要求为相同的 C 和 P 创建两次匹配(例如,与 PLINQ 同时),我会创建重复项吗?(什么消息会返回给用户?)

我正在努力解决的事情:

  1. 我应该如何为 FsCheck 生成测试数据?我认为正确的方法是定义 Cs 和 Ps 的所有离散可能组合来创建匹配,并将它们作为我基于模型的测试的“前提条件”,后置条件是是否应该创建匹配,但是...
  2. 这真的是正确的方法吗?对于基于随机属性的测试工具来说,这感觉太确定了。在这种情况下甚至使用 FsCheck 是否过度设计?然后,就好像我有一个忽略种子值并返回确定性测试数据流的数据生成器。
  3. 在这一点上,FsCheck 生成器与仅使用 xUnit.net 和 AutoPOCO 之类的东西有什么不同吗?
0 投票
2 回答
1680 浏览

c# - C#中的FsCheck:生成具有相同形状的二维数组列表

假设我正在编写一些用于视频分析的代码。这是 Video 类的简化版本:

我如何制作Arbitrary<Video>并注册它?我如何为那个任意制作收缩器?

试过这个,不明白 apply 是如何工作的:

试过这个,但无法在此处插入列表生成器:

0 投票
1 回答
131 浏览

f# - 将基于 System.Random 的生成器变成 FsCheck 生成器

假设我有一个基于的生成器,System.Random并且我想将它变成一个 FsCheck 生成器:

这个简单的解决方案有几个问题:首先是忽略了大小的概念;我认为这不是一个大问题,许多生成器忽略了大小。另一个问题会影响可重复性,因为 FsCheck 生成器是底层的纯函数,随机性仅由测试运行器中的采样机制提供。(这在这个答案中有清楚的解释)。

现在,一个解决方案可能是:

但是有性能损失,因为我MyGen每次都必须创建一个新实例(初始化成本可能很高)

有更好的办法吗?

0 投票
1 回答
2234 浏览

f# - F# 中“==>”语法的含义

考虑 F# 中的以下代码

接着

最后

我无法理解的是==>最后一行的含义!

它是什么?

0 投票
1 回答
178 浏览

f# - 此表达式应为字符串类型,但此处为 Gen

我有这个记录:

要为此记录创建生成器,我尝试了以下代码:

问题Name= generateName;与我遇到的错误一致:

最后剩余的行存在此错误。

0 投票
1 回答
158 浏览

tdd - 基于负属性的测试

当您可以表达简单且定义明确的属性时,基于属性的测试是很好的。

在测试解析器的情况下,我也很幸运地使用了“负面属性”,例如通过生成无效标识符或缩进敏感语言的不匹配缩进。但是“负面属性”是一种常见的表达和测试的东西吗?这意味着编写生成专门的虚假输入的生成器。

有哪些与解析器无关的负面属性的真实例子?

0 投票
1 回答
58 浏览

f# - Using FsCheck, the propertyCheck function is NOT recognized

The "propertyCheck" function that is referenced within my test method is NOT recognized when I attempt to build my test.

I thought that propertyChecked was a core function of the FsCheck framework?

What other ceremony do I need to perform?

0 投票
1 回答
54 浏览

f# - 属性测试作为单元测试运行失败,即使它确实通过了

看起来我作为单元测试运行的属性测试失败了,即使它确实通过了。

代码如下:

概括:

测试名称:当我添加两个数字时,结果不应该取决于参数顺序

测试全名:Tests.Units.当我添加两个数字时,结果不应该取决于参数顺序

测试结果:失败

结果 StackTrace:在 FsUnit.TopLevelOperators.should[a,a](FSharpFunc`2 f, ax, Object y) in d:\GitHub\FsUnit\src\FsUnit.NUnit\FsUnit.fs:line 44

在 Tests.Units. 当我添加两个数字时,结果不应该取决于参数 order()

结果消息:预期:true,但是是

结果标准输出:好的,通过了 100 次测试。

我读对了吗?

我错过了什么?

0 投票
1 回答
104 浏览

unit-testing - 使用 RGR 方法时,属性测试是否应该与单元测试一起运行?

使用 RGR 方法时,属性测试是否应该与单元测试一起运行?

RGR:红色 -> 绿色 -> 重构

我注意到我在 18 毫秒内执行的单元测试。

但是,我对相同方法的属性测试需要 215 毫秒。

所以我的属性测试需要四分之一秒才能执行。

此外,这只是一个简单的属性测试。

运行属性测试的有效方法是什么?

只是签到?