问题标签 [property-based-testing]
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.
scala - 测试递归数据结构
ScalaCheck:权威指南解释了如何为递归数据结构创建生成器。
首先,它定义了数据结构:
接下来,它显示Gen[Tree[A]]
代码:
对于上面的生成器,本书演示了,调用它可能会导致StackOverflowError
:
给定以下MyList
数据结构:
以及以下生成器:
我的理解是,Gen[Tree[A]]
对 的使用listOf
负责StackOverflowError
。
但是,代码StackOverflowError
生成器中是否有可能Gen[MyList[A]]
?
我猜是如果足够genList
返回足够Cons
的,但我不确定。
scala - Scala:基于属性的测试:编写测试时如何了解所有必要的测试用例
我正在阅读使用 Scala 语言进行基于属性的测试。在这张幻灯片中,他们提出了这个概念:证明函数a+b
是真的。我们只是为了证明这些陈述在随机数据上是正确的:
- a + b = b + a
- 一个 + 0 = 一个
- 一个 + 1 + 1 = 一个 + 2
我的问题是:哪些方法可以检查我们的测试用例是否足够,并且可以涵盖不同数据的所有案例。例如在前面的例子中,我们如何确定在我们的三个属性正确运行之后,我们可以确定我们的实现是正确的。
f# - Expecto FsCheck在生成字符串时出现堆栈溢出异常
我正在尝试学习如何正确使用 FsCheck,并将其与 Expecto 集成。如果我使用默认的 FsCheck 配置,我可以运行属性测试,但是当我尝试使用自己的生成器时,它会导致堆栈溢出异常。
这是我的发电机
我正在尝试像这样使用它:
异常甚至在进入Gen.where
函数之前就被抛出
我究竟做错了什么?谢谢
c# - 在 FsCheck 中将两个生成器组合成一个任意值
我有一个属性,我想在 的集合上进行测试Stuff
,其中一个Stuff
满足某个属性。我有一种方法可以生成Stuff
令人满意的属性,还有一种方法可以生成不满足的属性Stuff
。
今天,我正在做这样的事情(是的,我在 C# 中使用 FsCheck):
但这对排序进行了硬编码,即Stuff
集合中满足属性的排序;我也想仲裁。
一种方法是嵌套Prop.ForAll
调用;一个生成确定排序的东西的外部生成器,以及一个内部生成器,它是我上面的那个,但将控制排序的参数传递给集合构建器:
但这感觉很笨拙和令人费解。是否有更简单和/或更惯用的方法来实现相同的目标,即测试两个任意输出的笛卡尔积?
testing - Clojure 规范与基于属性的测试库(例如 Haskell QuickCheck)有何不同?
其他语言有基于属性的测试库,比如Haskell QuickCheck。Clojure 规范与此类库有何不同?或者它只是Clojure的一个基于属性的测试框架?
c# - C#、xunit、fscheck,使用自定义生成器或受约束的随机字符串编写基于属性的简单测试
我正在尝试解决菱形 kata,以便学习如何使用 fscheck 库编写基于属性的测试。我想用 C# 编写测试,我正在使用 Visual Studio 2017。
我想编写一个基于属性的测试,它不会生成任何随机字符作为输入,而只会生成字母。我不确定如何编写生成器 fscheck 需要执行此操作以及将代码放在哪个文件中?
我到处搜索并阅读文档,但遇到了麻烦(部分原因是我不能很好地将 F# 翻译成 C#)。
如何[Property]
用于将输入数据限制为仅字母?
如果有更好的方法请告诉我。
[编辑:]
我编辑了我的代码示例,现在包含 Kurt Schelfthout 的一个工作解决方案。
测试
测试类
c# - FsCheck:如何生成依赖于其他测试数据的测试数据?
FsCheck 有一些简洁的默认Arbitrary
类型来生成测试数据。但是,如果我的一个考试日期取决于另一个考试日期怎么办?
例如,考虑string.Substring()
结果子字符串永远不能长于输入字符串的属性:
虽然实现Substring
肯定是正确的,但这个属性失败了,因为最终PositiveInt
会生成比生成的更长的 a,NonEmptyString
从而导致异常。
收缩:NonEmptyString "a" PositiveInt 2 异常:System.ArgumentOutOfRangeException:索引和长度必须引用字符串中的位置。
我可以与 an 进行比较,if (input.Length < length) return true;
但这样我最终会进行大量测试运行,甚至没有检查该属性。
如何告诉 FsCheck 只生成PositiveInt
不超过输入字符串的 s?我想我必须使用这个Gen<T>
类,但它的界面让我很困惑......我尝试了以下但仍然PositiveInt
s 超过了字符串:
f# - 如何将 FsCheck 生成器列表累积为单个值?
我编写了一个 FsCheck 生成器,它产生随机 glob 语法模式(例如a*c?
)以及与该模式匹配的随机字符串(例如abcd
)。但是我的解决方案使用了一个可变变量,我对此感到很惭愧。看一看:
请注意,它text
是可变的,以及它的值是如何在循环中累积的。
我的直觉告诉我,必须有一种方法可以fold
将生成器导入text
,但我不知道如何,因为我不了解let!
引擎盖下的工作原理(还)。我正在考虑类似于以下内容:
我在正确的轨道上吗?累加器和种子应该是什么fold
样的?
java - QuickTheories:从列表创建生成器的方法
使用 java 库 QuickTheories,是否有一种内置方法可以从值列表创建生成器?
就像是:
自己动手并不算太糟糕,但似乎是在重新发明轮子:
javascript - 使用 JSVerify 强制特定输入
我开始使用 JSVerify 进行基于属性的测试。
给定一个接受字符串作为参数的函数(只是一个示例),我使用 JSVerify 传入大量任意字符串,并查看函数的行为是否符合所有字符串的预期。事实证明,有一些字符串会导致测试失败:到目前为止,我发现如果字符串包含\0000
, \0001
or \n
,则测试失败。
我想更正我的代码,以便相应地处理这种情况,但为了防止回归,我想确保每个测试运行都包含这些情况。我还想避免对数字生成器的种子 ( rngState
) 进行硬编码,因为这会阻止将来发现其他极端情况。
澄清一下:假设我正在测试我的功能foo()
:
foo()
每次运行测试套件时,该测试都会向其中输入 100 个随机字符串。最初它正在通过。在一些运行之后它突然失败,因为这一次,随机字符串生成器生成了一个包含字符的字符串\0000
,我的函数没有按预期处理。从现在开始,我希望我的测试每次都使用这个字符串作为输入,再加上通常的 100 个随机输入。
是否有使用 JSVerify 的内置方法来执行此操作?还是我应该将这些输入视为单独的测试用例?