问题标签 [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.
unit-testing - 在 F# 中使用条件参数进行基于属性的测试
我目前正在编写一个基于属性的测试,以使用 4 个浮点参数在 f# 中测试速率计算函数,并且所有参数都有特定条件才能使其有效(例如,a > 0.0 && a < 1.0 和 b > a) . 我确实有一个函数检查是否满足这些条件并返回一个布尔值。我的问题是,在我使用 FsCheck.Xunit 中的 [Property>] 的测试代码中,如何限制生成器仅使用满足我的参数特定条件的值来测试代码?
haskell - Hedgehog.Gen.list的定义中freeze有什么作用
Hedgehog.Gen.list
定义如下:
我原以为 usingShrink.list
足以产生列表的所有缩小。但是它会调用freeze
:
从函数的评论中,我理解了为什么使用它,但我对如何实现这个目标以及将其排除在外会产生什么效果感到困惑。
unit-testing - 当一个人有 2 张地图时,什么是更好的 StreamData 方法?
以下属性测试工作正常,但是,我认为应该有更好、更有效的方法来实现它。
params
下面property
将是这样的:
性能测试:
Factory.my_terms
如下:
更新
python - 假设等效于 QuickCheck 频率发生器?
作为一个学习项目,我正在将一些 Haskell 代码(我不熟悉)翻译成 Python(我很熟悉)......
我正在翻译的 Haskell 库具有使用基于属性的 QuickCheck 测试的测试。在 Python 方面,我使用 Hypothesis 作为基于属性的测试库。
Haskell 测试使用如下所示的辅助函数:
我的问题是关于frequency
这个助手中的生成器。
http://hackage.haskell.org/package/QuickCheck-2.12.6.1/docs/Test-QuickCheck-Gen.html#v:frequency
我理解它的意思是大多数时候它会vectorOf whitespace_char
以预期的形式返回size
,但 5 次中有 1 次会返回listOf whitespace_char
,它可以是任何长度,包括零。
在库的上下文中,不尊重的缩进size
将为被测函数建模错误的输入数据。所以我看到了偶尔产生这种输入的意义。
我目前不明白的是为什么 5:1 的比例有利于有效输入?我本来希望基于属性的测试框架生成各种有效和无效的输入。现在我假设这有点像优化,所以它不会花费大部分时间来生成无效示例?
我的问题的第二部分是如何将其转化为假设。AFAICT 假设没有任何等效的frequency
生成器。
我想知道我是否应该尝试frequency
从现有的假设策略中自己构建一个策略,或者习语本身是否不值得翻译,我应该让框架生成类似的有效和无效示例?
我目前拥有的是:
如果我在 shell 中生成一些示例,这似乎正是我认为应该做的。
但这是我第一次使用假设或基于属性的测试,我想知道通过用frequency
简单的替换分布是否会丢失一些重要的东西one_of
?
scala - 如何覆盖 ScalaCheck 的一些生成器以强制(自动)生成精炼类型?仅非空列表,例如
我有一个相当大的案例类结构,并且在这个结构的深处,我有我想要改进的字段,例如,使列表非空。是否可以使用scalacheck-magnolia项目的自动派生来告诉 ScalaCheck 使这些列表非空(不具体提供每个字段)?例子:
但它没有成功。
scala - 在 ScalaCheck 中使用嵌套的 forAll 在生成的对象之间共享元素
最近开始在 Scala 中编码,我尝试编写一些基于属性的测试用例。在这里,我试图生成模拟我正在测试的系统的原始数据。目标是首先生成基本元素(ctrl
和idz
),然后使用这些值生成两个类(A1
和B1
),最后检查它们的属性。我首先尝试了以下 -
在终端中运行sbt test
给了我以下信息 -
现在很容易看出为什么第二个属性失败了。因为每次我屈服A1
并且我为而不是因为它是一个常数而B1
产生不同的价值。以下是我的第二种方法,其中,我创建嵌套以尝试实现我的目标 -id
ctrl
for-yield
以第二种方法运行sbt test
告诉我所有测试都通过了。
有没有更好/替代的方法来重现我想要的结果?嵌套forAll
对我来说似乎相当笨重。如果我要R -> S -> ... V -> W
在我的依赖图中有对象共享元素,那么我将不得不创建尽可能多的嵌套forAll
.
unit-testing - 我应该在基于属性的测试中重新实现逻辑吗?
假设有一个函数可以确定按钮是否应该可见。
现在我想使用 PBT 来测试这个功能,比如:
看来我只是在测试中再次重新实现了逻辑,这是正确的吗?如果没有,如果逻辑只是几个标志的简单组合,我怎么能想出另一个属性?
c++ - 如何使用 cmake 在 C++ 中进行快速检查(基于属性的测试)?
我想在我正在研究的 C++ 库中进行一些基于属性的测试,并且正在考虑使用 RapidCheck,除非有人有更好的主意。(例如,我需要生成任意std::set<int>
,如果我可以在int
集合的范围和集合的大小上设置界限,那就更好了。)
说了这么多,我还是个 cmake 新手。RapidCheck 中似乎没有任何说明,只是将其作为源代码的一部分包含在内(尽管下载它会更好)。我已经到了可以在我的代码中包含 RapidCheck 的标头的地步,但是当我尝试使用 RapidCheck 构建任何应用程序时,我被告知缺少 RapidCheck 的符号或缺少 rapidcheck 库。
我假设我必须将 RapidCheck 本身构建为项目的一部分以生成库,但我不完全确定如何执行此操作,而且似乎很难找到任何执行此操作的示例。
是否有人对完成此类事情的示例有任何建议,以便我可以看到构建第 3 方 API 所需的命令字符串,并在构建可执行文件时包含库,或者 - 甚至更好 - 使用 RapidCheck 的项目示例确实是这样吗?缺乏关于如何设置的文档令人沮丧。
我希望这不是过于模糊。总而言之,我想从 cmake 做些什么:
- 最好下载 RapidTest(尽管直接从 RapidTest 项目中包含文件也可以)。
- 运行所需的命令并设置必要的变量以使我的测试代码(在 中
${PROJECT_SOURCE_DIR}/test
)能够访问 RapidTest 标头。 - 生成(如有必要)RapidTest 库并制作它,以便我可以将其链接到我正在运行的测试。
提前感谢您提供的任何帮助!
haskell - Haskell:基于属性的高阶函数测试
我有两个函数foo
必须满足的属性:
我正在尝试使用 quickCheck 检查上述属性是否满足以下功能:
当我尝试使用 prop_2 运行 quickCheck 时,出现以下错误:
我不确定为什么会收到此错误以及如何解决它。任何见解都值得赞赏。
haskell - Haskell:用高阶函数理解 QuickCheck
我有这个功能foo
:
以及它必须满足的以下两个属性:
当我尝试使用 quickCheck 测试该功能时,我收到以下错误:
我不确定为什么会收到此错误以及如何解决它。任何见解都值得赞赏。