问题标签 [scalacheck]

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 投票
4 回答
1853 浏览

scala - 使 ScalaCheck 测试具有确定性

我想暂时使我的 specs2 测试套件中的 ScalaCheck 属性测试具有确定性,以简化调试。现在,每次我重新运行测试套件时都可能生成不同的值,这让调试变得令人沮丧,因为您不知道观察到的行为的变化是由您的代码更改引起的,还是仅仅由生成的不同数据引起的。

我怎样才能做到这一点?有没有官方的方法来设置 ScalaCheck 使用的随机种子?

sbt用来运行测试套件。

奖励问题:是否有官方方法可以打印出ScalaCheck 使用的随机种子,以便您甚至可以重现非确定性测试运行?

0 投票
1 回答
190 浏览

specs2 - ScalaCheck 选择无需替换

如何编写一个Gen[A]永远不会返回相同对象两次的使用 ScalaCheck?

可以重复选择同一个对象,所以这是行不通的。

我在 specs2 中编​​写了一个可变规范,我想这样做的原因是,在某种意义上,被测系统的行为应该只允许每个对象“使用”一次。

编辑:“相同”我的意思是根据 相同==,并且对象实际上是字符串,所以我不能每次都创建相同的字符串。

0 投票
2 回答
455 浏览

scala - 从 specs2 中失败的 Scalacheck 属性中识别完全失败的匹配

我正在运行一个 specs2 测试套件sbt,使用该test命令。当 ScalaCheck 属性失败时,我只会在我的代码中看到 specs2 匹配失败的文件名和行号——当它碰巧是一种实用方法时,它不是很有用,它执行我经常做的一种常见类型的检查. 堆栈跟踪会更好。

我已经last在 sbt 中尝试过该命令,但这并没有显示我正在寻找的堆栈跟踪。唯一的堆栈跟踪last显示是这个通用的:

我还在 java.util.logging 属性文件中启用了 FINEST 日志记录级别。

现在,我正在使用 Eclipse 调试器解决这个问题,但在某些情况下,它是不必要的重量级。

0 投票
1 回答
235 浏览

unit-testing - Scalacheck,单元测试多进程算法

我目前正在使用 MPJ-Express(即 Java MPI 变体)为多进程并行算法开发 Scala 框架。

MPJ-Express 和基本上所有 MPI 变体通过使用相同程序启动多个进程来工作。由于我无法控制运行时的进程(我的程序不会产生进程),因此由于以下原因,我无法使用标准单元测试框架:

  1. 并非所有进程在执行后都会拥有结果的本地副本(理想情况下,结果应该在任意根进程中收集)

  2. 缺乏对标准输出的控制。仅从单个进程中获取输出并不容易。

  3. 缺乏流量控制。所有进程必须同时进入同一个测试,以允许单程序多数据算法。

数字 2 主要是问题所在,因为 3 可能会按预期工作,而 1 可以通过额外的通信操作来修复。有没有人有实践经验,或者知道多进程算法的更好的单元测试策略?

编辑

现在,我似乎对使用scalacheck的以下代码很幸运:

上面的代码将 scala-println 方法重新路由到除 p=0 之外的所有其他进程的 nop 操作。我应该能够使用并行方法运行测试套件,只允许根进程来验证结果。以上产生以下输出:

0 投票
1 回答
421 浏览

scala - 为 scalacheck 函数获取 2 个隐式

我正在使用 scalacheck,现在正处于通用编程汤的中间。官方指南显示了这个例子:

同时,对于我的测试,我需要一个 Array[Array[T]] 类型的矩阵。我尝试了以下功能:

在这里,我遇到了麻烦。编译器说:

此行有多个标记 - 方法 containerOfN 的参数不足:(隐式 b:org.scalacheck.util.Buildable[T,Array])org.scalacheck.Gen[Array[T]]。未指定值参数 b. - 找不到参数 b 的隐式值:org.scalacheck.util.Buildable[T,Array] - 找不到参数 b 的隐式值:org.scalacheck.util.Buildable[T,Array] - 方法的参数不足containerOfN: (隐式 b: org.scalacheck.util.Buildable[T,Array])org.scalacheck.Gen[Array[T]]。未指定值参数 b.

我知道这样的事情通常可以通过向函数添加隐式参数来解决,但是,我还没有完成这项工作。

我在构建泛型数组时通常会遇到这个错误,例如:

但是,恐怕我不完全了解正在发生的事情或为什么需要这样做。

有人可以解释如何制作正确的矩阵函数以及scalacheck中的使用示例吗?非常欢迎对有关使用隐式类清单构建序列的详细信息进行全面解释!

编辑

还是不行。Buildable[Array[T],Array] 需要隐式...不知道如何得到这个,因为我只能添加 1 个隐式参数:/

0 投票
1 回答
321 浏览

scala - Scalacheck 道具类型不匹配

我遇到过这个错误几次。这很不言自明,不匹配出现在我的 ans var 上,它是一个 Int,我相信它应该是这样,但是它需要类型 prop。我感觉它与语法有关,我构建它的方式,但让我知道你的想法:

在此处输入图像描述

0 投票
4 回答
4051 浏览

scala - Scalacheck:生成与生成器列表对应的列表

我想生成一个整数列表,该列表对应于ScalaCheck.

对于给定的gens,我想创建一个生成器listGen,其有效样本可以是List(2, 2000, 0, 6)。这是我第一次尝试使用元组。

这可行,但我不想使用元组,因为生成器列表gens是动态创建的,并且列表的大小不是固定的。有没有办法用列表做到这一点?

我希望listGen在 scalacheckforAll属性检查中使用 list() 的生成器。

这看起来像是一个玩具问题,但这是我能做的最好的事情,以创建一个独立的片段来重现我面临的实际问题。

0 投票
2 回答
1796 浏览

java - 在 Java 中随机生成 *interesting* 字符串

我一直在使用 ScalaCheck 进行自动单元测试。它的默认字符串生成器(即它的默认Arbitrary[String]实例)有点强大了,通常会产生一个不可读的混乱,主要由我不想支持的字符组成,我的系统甚至无法渲染。

我已经着手创建更多Arbitrary[String]实例,并试图找出那里有什么。以下是一些有助于测试的 String 类示例:

  • 基本多语言平面字符串
  • 星光弦
  • 拉丁字符串(包括扩展 a/b)
  • 法语单词
  • 从左到右的语言字符串
  • 从右到左的语言字符串
  • 中文句子
  • “网络字符串”(从构成网络内容 99.9999% 的字符集中提取的字符串)
  • 动用你的想象力 ...

是否有可以随机生成这些或类似字符串的库?

0 投票
1 回答
4570 浏览

scala - 为什么 sbt 在成功解析 scalacheck 后给出“object scalacheck 不是包 org 的成员”?

我在中添加了以下内容build.sbt

compilesbt 中的项目上,依赖关系已成功解决,如日志中所示:

但是,在编译一个文件时出现以下错误。

这可能是什么原因?

有没有办法查看 sbt 在compile任务期间使用的类路径?

请注意,该项目在 ScalaIDE 中构建良好。(我使用 sbteclipse 生成 eclipse.classpath文件。生成的.classpath有正确的 scalacheck 条目。)

0 投票
1 回答
111 浏览

scala - 从 Scala 2.9.2 中的 scala 运行器的类路径中排除 scalacheck

一个scalacheckjar 意外地包含在 Scala 2.9.2 的标准发行版的lib目录中,以及标准的 scala 运行时类(例如scala-library.jar)。这是被发现的,并为后续的 Scala 发行版修复。

我想运行 scala 2.9.2 解释器并使用不同版本scalachecklib.

我试过了:

所有这些仍然使用scalacheck.jar. 除了从中删除 jar 之外,还有什么方法lib可以运行解释器,将类路径中的 jar 排除在外lib