如何减少 ScalaCheck 生成的测试用例数量?

2023-12-25

我正在尝试解决两个 ScalaCheck (+ specs2) 问题:

  1. 有什么方法可以改变 ScalaCheck 生成的案例数量吗?

  2. 如何生成包含一些 Unicode 字符的字符串?

例如,我想生成大约 10 个包含字母数字和 Unicode 字符的随机字符串。然而,此代码始终生成 100 个随机字符串,并且它们严格基于字母字符:

"make a random string" in {
    def stringGenerator = Gen.alphaStr.suchThat(_.length < 40)
    implicit def randomString: Arbitrary[String] = Arbitrary(stringGenerator)

    "the string" ! prop { (s: String) => (s.length > 20 && s.length < 40) ==> { println(s); success; } }.setArbitrary(randomString)
}

Edit

我刚刚意识到还有另一个问题:

  1. 通常,ScalaCheck 会在未生成 100 个测试用例的情况下放弃

当然,我不需要 100 个,但显然我的代码正在尝试生成一组过于复杂的规则。上次运行时,我看到“47 次测试后放弃”。


“47 次测试后放弃”错误意味着您的条件(包括suchThat谓词和==>部分)限制太多。幸运的是,将它们烘焙到生成器中通常并不难,在您的情况下,您可以编写类似这样的内容(这也解决了选择任意字符的问题,而不仅仅是字母数字字符):

val stringGen: Gen[String] = Gen.chooseNum(21, 40).flatMap { n =>
  Gen.buildableOfN[String, Char](n, arbitrary[Char])
}

在这里,我们选择所需范围内的任意长度,然后选择该数量的任意字符并将它们连接成一个字符串。

您还可以增加maxDiscardRatio范围:

import org.specs2.scalacheck.Parameters
implicit val params: Parameters = Parameters(maxDiscardRatio = 1024)

但这通常不是一个好主意 - 如果您丢弃大部分生成的值,您的测试将花费更长的时间,并且重构您的生成器通常会更干净、更快。

您还可以通过设置适当的参数来减少测试用例的数量:

implicit val params: Parameters = Parameters(minTestsOk = 10)

但同样,除非您有充分的理由这样做,否则我建议您相信默认值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何减少 ScalaCheck 生成的测试用例数量? 的相关文章

随机推荐

  • 通过 CPU/GPU 的占位符获取不同的值

    当我运行下面的代码时 我认为我得到了错误的结果 OVER GPU import tensorflow as tf sess tf Session a tf placeholder tf float32 b tf placeholder tf
  • 如何在 CakePHP 中强制刷新图像和 css 文件?

    我有以下问题 我正在 CakePHP 中编码 而且我是新手 我经常需要更改网站上的一些图像或 css 文件 在网站上我总是看到旧的内容 除非我手动按键盘上的 F5 我必须在每个使用该网站的工作场所执行此操作 这很令人恼火 尤其是因为我不知道
  • 更改子进程中的环境变量 - bash

    嗨我有以下示例 a sh 脚本设置了我可以在 b sh 子 脚本中看到的环境变量 但是如果我更改它 我仍然在 a sh 中保留旧值 a sh bin bash export A 1 b sh echo parent A b sh bin b
  • 存储WPF图像资源

    对于需要 10 20 个小图标和图像用于说明目的的 WPF 应用程序 将它们作为嵌入式资源存储在程序集中是正确的方法吗 如果是这样 如何在 XAML 中指定图像控件应从嵌入资源加载图像 如果您将在多个地方使用该图像 那么值得将图像数据仅加载
  • 比较 Highcharts 组合图表中工具提示内的两个数据点

    我有一个共享单个 Y 轴的组合条线图 条形图和折线图的数据点始终共享相同的 Y 值 我希望能够计算工具提示中两个 X 值之间的差异 这是我正在使用的图表 组合图 http jsfiddle net 7RQU4 让它工作 诀窍在于工具提示的共
  • 如何编写 ZF2 路由器脚本以允许默认操作上的参数

    我试图解决 ZF2 中路由语句的一些特性 相册模块示例建议如下 router gt array routes gt array album gt array type gt segment options gt array route gt
  • 如何消除 Windows.Forms 自定义控件滚动时的闪烁?

    我想用 C 创建一个自定义控件 但每次我必须完全重绘控件时 即使我使用双缓冲 首先绘制到图像 然后位图传输 它也会闪烁 当我必须完全重绘时如何消除闪烁 您可以尝试在 InitializeComponent 调用之后将以下内容放入构造函数中
  • 如何使用 Knex.js 从列中检索唯一值?

    I use Knex js http knexjs org 与 Postgres 数据库通信 我的表中有一些行 其中有一列名为 state 代表美国的一个州 如何从此列中检索所有唯一值 您可能正在寻找不同的节点 https knexjs o
  • 如何对推送通知进行分组

    我正在向我的 Android 手机发送推送通知 我希望对这些通知进行分组 这样我的通知列表就不会被淹没 根据文档 来自同一 源 的消息被分组 但在我的手机上 消息总是显示为未分组 我从 Google Apps 脚本调用推送 API 并尝试在
  • 从多个远程Windows服务器获取磁盘空间信息

    我正在尝试制作一种工具 可以登录多个远程 Windows 服务器并获取其驱动器详细信息并将其显示在一个窗口下 我希望在远程服务器中执行的可能命令是wmic logicaldisk get size freespace caption 我打算
  • matplotlib 文本未剪切

    绘制文本时matplotlib with text 然后交互平移图像 生成的绘制文本不会剪切到数据窗口 这与使用绘制数据或绘制文本的方式相反annotate 有效 并且没有直观意义text 使用数据窗口坐标 import matplotli
  • 当 CWD 更改时,如何在 Python 模块中使用相对路径?

    我有一个 Python 模块 它使用模块目录的子目录中的一些资源 在搜索堆栈溢出并找到相关答案后 我设法使用类似的方法将模块定向到资源 import os os path join os path dirname file fonts my
  • 将结构传递到接口字段中是否会分配?

    我有一个像这样的结构 struct MyStructure IFoo 和这样的方法 public BarThisFoo IFoo a 我的问题是将结构传递到该方法中是否会 装箱 结构 从而导致垃圾分配 附录 在有人说之前 垃圾收集在这个应用
  • TwinCAT3 基于 Jenkins 构建

    是否可以在 Jenkins 上构建 TwinCAT3 解决方案 我已经用 msbuild 和 devenv com 尝试过了 msbuild MSBuild 不支持 tspproj devenv com tspproj 找不到该项目类型所基
  • 导入错误:没有名为 的模块

    我正在尝试通过 Python 学习编程 所以如果这是一个简单得荒谬的问题 我提前道歉 我试图简化我复杂的目录结构并利用Python的一些代码重用功能 我遇到了对我来说莫名其妙的问题ImportError错误 在过去的几个小时里 我一直在阅读
  • 带参数的回调函数ReactJS

    使用 ReactJS 并难以理解如何使用callback functions使用 ReactJS 我有一个名为的父组件TodoFormComponent 它初始化我的待办事项列表 我已经创建了一个回调函数TodoItemsComonent
  • 跨 DLL 调用 CoInitialize/CoUninitialize 的合适位置是什么?

    我正在实现一个 DLL 其中包含共享 ADO 连接 https stackoverflow com questions 9434762 pass adoconnection from vba to delphi通过使用ConnectionO
  • 根据 GPS 坐标记录计算圈数

    我有一个包含大量点的 GPX 文件 按时间排序的经度和纬度 如何计算我的点集包含多少圈 GPS 在赛道比赛期间被记录 圈数是车辆通过赛道起点 终点的次数 假设轨道足够小 我们可以假设这些点位于一个平面上 例如 我们可以忽略地球的曲率 在这种
  • Scala 反序列化:找不到类

    我试图理解尝试序列化 反序列化一个非常简单的数据结构时发生的以下问题 case class SimpleClass i Int object SerializationDebug def main args Array String val
  • 如何减少 ScalaCheck 生成的测试用例数量?

    我正在尝试解决两个 ScalaCheck specs2 问题 有什么方法可以改变 ScalaCheck 生成的案例数量吗 如何生成包含一些 Unicode 字符的字符串 例如 我想生成大约 10 个包含字母数字和 Unicode 字符的随机