问题标签 [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 回答
1217 浏览

unit-testing - 如何使用 FsCheck 生成随机数作为基于属性的测试的输入

我认为是时候尝试 FsCheck 了,但事实证明它比我想象的要难。有很多关于Arb, generators 等的文档,但似乎没有任何关于如何应用这些知识的指导。或者我只是不明白。

可能更难理解的是,测试、属性、生成器、任意性、收缩以及在我的情况下随机性(一些测试自动生成随机数据,其他测试不会)之间的关系对我来说并不清楚。我没有 Haskell 背景,所以这也无济于事。

现在的问题是:如何生成随机整数?

我的测试场景可以用乘法的性质来解释,比如说分布性:

当我使用Check.VerboseNUnit 集成运行它时,我得到如下测试序列:

经过1000次测试,它还没有结束100L。不知何故,我想象这将“自动”选择均匀分布在整个范围内的随机数int64,至少我是这样解释文档的。

既然没有,我开始尝试并想出如下愚蠢的解决方案来获得更高的数字:

但这变得异常缓慢,显然不是正确的方法。我确信必须有一个我缺少的简单解决方案。我试过了Gen.choose(Int64.MinValue, Int64.MaxValue),但这只支持整数,而不是长整数(但即使只有整数我也无法让它工作)。

最后,我需要一个适用于所有原始数值数据类型的解决方案,包括它们的最大值和最小值、它们的零和一,以及从其中的任何内容中进行的一些随机选择。

0 投票
1 回答
167 浏览

types - 如何使用 F# 语法将类型作为属性参数传递?

FsCheck 允许Arbitrary在其 NUnit 集成中自定义:

此语法不起作用。问起来有点不好意思,但显然我以前从未需要过这个:如何将F#中的类型指定为属性参数?微软对此一无所知, Wikibooks项目也没有,我在谷歌上搜索时遇到了一些麻烦(单词类型无处不在)。

注 1:Arbitrary参数类型为Type [].

0 投票
3 回答
343 浏览

f# - Using FsCheck with NUnit: receiving exception on using Arbitrary types (or: how to use Arbitrary types with attributes)

In my previous question Kurt pointed me to this code of FsCheck about setting the Arbitrary type.

I have the following Arbitrary (disclaimer: I have no idea what I am doing..., still finding FsCheck notoriously hard to understand but I'm dead set on getting it to work), which in itself is a simplified version of something I created earlier:

And I use it as instructed:

This gives me a (somewhat hopeful) error message that I'm missing something:

Looking back at that Github code I see two Atrbitrary classes but neither with any inheritance and they both have different static members.

How can I create a random-number generator and assign it as an Arbitrary statically to my NUnit tests?

0 投票
1 回答
488 浏览

tdd - 使用 FsCheck 属性时如何排除空值?

我需要编写一个简单的方法来接收参数(例如 a string)并执行 smth。通常我会做两个测试。第一个是保护条款。第二个将验证预期的行为(为简单起见,该方法不应失败):

当我尝试利用FsCheck [Property]属性生成随机数据时,null许多其他随机值被传递给测试,这在某些时候会导致 NRE:

我意识到这是 FsCheck 生成大量随机数据以涵盖不同情况的整个想法,这绝对很棒。

是否有任何优雅的方式来配置[Property]属性以排除不需要的值?(在这个特定的测试中是null)。

0 投票
1 回答
442 浏览

random - 如何为 FsCheck 创建具有固定项目列表的生成器

我最初尝试创建一个固定前 5 个元素的生成器(并且在任何使用Prop.forAll前五个元素的测试中总是会运行),但没有这样做。

现在我试图通过在一个范围内使用一个随机数据生成器和一个用于非随机数据(即固定序列)的生成器来简化这一点。它类似于Gen.constant,不同之处在于它不是一个值,而是一个值序列。

我有这个(简化的可重现示例,适用于 NUnit 和 xUnit):

输出是(不知道从哪里来null):

我希望输出包含序列中的所有五个测试,最好但不一定按顺序。我知道我可以使用 testdata 提供程序使用 NUnit(或任何单元测试系统)来做到这一点,但我想知道我是否可以使用 FsCheck 来做到这一点(或者我是否应该这样做,也许这是一个坏主意)。

我认为使用 FsCheck 很有用,至于有多个函数参数的情况,我希望它能够详尽地测试我给它的极端情况参数的所有组合。这希望使用 FsCheck 比使用测试数据提供者更容易。

0 投票
1 回答
399 浏览

c# - FsCheck c#当属性组合器

我正在尝试采用 fscheck,但由于没有太多 C# 文档,所以很难。你能解释一下,为什么下面这个使用 When 组合器作为属性的例子会失败(显然,我不明白如何正确使用它)?

0 投票
1 回答
84 浏览

c# - 每个测试可以有多个断言吗?

我昨天开始查看 FsCheck,我正在尝试编写一个简单的测试,即 DiscountAmount 的任何实例都将始终具有负值。我的问题是,在一个测试中是否可以有多个断言。例如,这里我说创建 discountAmount 的金额加上折扣金额应该是 0。但我也说折扣金额应该小于 0。这应该是 2 次测试还是 1 次?

0 投票
1 回答
56 浏览

c# - 这是组成任意性的好策略吗?

刚开始看 FsCheck,写了几个测试,现在我想知道什么是编写更复杂的任意值的好策略。是否在任意好的方法中注册任意项?像这样的东西

0 投票
1 回答
132 浏览

c# - 如何使用 FsCheck 为可空类型生成空值?

我有这个似乎可以工作的生成器,但是当我检查生成的值时,它永远不会选择空值。如何编写一个将选择空值的生成器。此代码从不为“结束”日期选择空值。

0 投票
1 回答
379 浏览

f# - 如何定义 FSCheck 生成器以便可以发现它

我正在编写一个 FSCheck 生成器来创建具有以下属性的字符串:

  • 它们是非空的
  • 修剪它们不会影响长度
  • 它们不包含空格。

这是我的生成器代码:

这是一个旨在验证生成的测试:

当我运行这个测试时,我得到:

据我所知,查看 FSCheck 源代码,我定义的成员应该由发现过滤器找到,并且该方法似乎类似于类似的内置方法,例如NonEmptyString.

我错过了什么?谢谢!