Scalatest 案例类列表中的双倍等价

2024-01-03

I have Double值将相似,但不精确。通常我会这样做:

val a: Double = ???
val b: Double = ???

a shouldEqual b +- 0.25

如果我只是比较单个案例类,我会这样做:

case class Data(label: String, value: Double)
val a: Data = ???
val b: Data = ???
a.value shouldEqual b.value +- 0.25

就我而言,我有一个案例类实例列表,并且想将它们与它们的容差进行比较value属性:

val output = Seq(Data("a", 1.1), Data("b", 1.2))
val expected = Seq(Data("a", 0.9), Data("b", 1.1))
output should contain theSameElementsInOrderAs expected

当然,这会归档,因为value属性不完全匹配。我需要的是这样的:

output should contain theSameElementsInOrderAs expected +- 0.25

我最终定义了一个自定义Matcher for my Seq[Data] type:

trait CustomMatcher {

  class SeqDataContainsTheSameElementsInOrderAs(expected: Seq[Data]) {

    override def apply(left: Seq[Data]): MatchResult = {

      // ... do other checks like comparing the length and such

      val bad = left.zip(expected).filter(t => {
        val difference = Math.abs(t._1.value - t._2.value)
        difference > TOLERANCE // Declare this somewhere
      })

      // Return the MatchResult, you will probably want to give better error messages than this
      MatchResult(
        bad.isEmpty,
        s"""Some of the values were not equal""",
        s"""Everything was equal"""
      )
    }

    def customContainTheSameElementsInOrderAs(expected: Seq[Data]) = new SeqDataContainsTheSameElementsInOrderAs(expected)
  }
}

然后我像这样使用它:

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

Scalatest 案例类列表中的双倍等价 的相关文章

  • 根据 Slick 中的 Id 选择单行

    我想根据 Id 查询用户的一行 我有以下虚拟代码 case class User id Option Int name String object Users extends Table User user def id column In
  • Spark Scala 相当于 SKEW 连接提示

    Spark SQL 有一个可用的倾斜提示 请参阅here https docs databricks com spark latest spark sql skew join html relation columns and skew v
  • Scala:解决“非法循环引用”

    我正在尝试实现一个基于 HashMap 的树 它支持给定根键的 O 1 子树查找 为了实现这个目标 我正在努力做到以下几点 scala gt type Q HashMap Char Q
  • 如何将 JSON 转换为 Scala 中的类型

    我的问题是我收到来自 twitter 的 JSON 文本 然后我想将此文本转换为 scala 中的本机对象 有标准方法可以做到这一点吗 我也在用Play 2 这是我所拥有的 import scala io Source fromInputS
  • scala 生成的字节代码如何删除已检查的异常?

    是否可以为应该抛出检查异常的方法编写字节代码 例如 除非该方法声明它抛出已检查的异常 否则以下 Java 类不会编译 public class CheckedExceptionJava public Class
  • SBT:具有不同依赖项的两个 Scala 版本的交叉构建项目

    我有以下用例 我想为 scala 2 10 和 2 12 构建相同的 Scala 项目 这样做时 我想指定所提供的 2 10 版本的一些依赖项 而我希望将这些依赖项编译到 2 12 的 jar 中 我正在查看 SBT 的文档 发现如何分割b
  • Scala:列表中不同的foldRight实现

    我刚刚发现 scala 我在 2 12 上 提供了完全不同的实现向右折叠 for 不可变列表 and 可变列表 不可变列表 List scala override def foldRight B z B op A B gt B B reve
  • 缓存隐式解析

    为了减少项目的编译时间 我缓存了通过隐式查找解析的某些类型类 但这看起来有点麻烦 因为直接的实现不起作用 scala gt implicit val x String implicitly String x String null 隐式查找
  • 将参数传递给 Scala 对象

    是否可以从外部对象初始化 Scala 对象 我尝试初始化的 Scala 对象没有任何 Companion 类 这是一个例子 object ObjectA val mongoDBConnectionURI This is the Val th
  • 使用 Akka 将文件从服务器流式传输到客户端

    基本上我想允许用户从服务器下载 csv 文件 假设服务器上已存在 CSV 文件 API 端点通过 GET export 公开 如何将文件从 Akka HTTP 服务器流式传输到客户端 这就是我到目前为止所拥有的 Service def ex
  • Scala“对象”的继承

    我有这个Java代码 class Super public static void foo bar public static void bar out println BAR public static void main String
  • 错误:使用替代方法写入重载方法值:

    我正在尝试读取固定宽度的文件并将其写入文本文件 下面是代码 输入文件布局字段的长度 4 10 3 5 3 1 1 5 7 094482018 07 10 022 14012 000 0 30000A 002290 059412018 07
  • scala 元组拆包

    我知道这个问题已经以不同的方式出现过很多次 但我仍然不清楚 有没有办法达到以下目的 def foo a Int b Int foo a b right way to invoke foo foo getParams is there a w
  • Scala 修饰符和类型参数化

    我正在创建一个记忆类 每个类都会记忆一个函数类型并具有以下定义 class MemoizedFunction1 T1 R f T1 gt R private this val cache mutable Map T1 R def apply
  • 在 Scala 中定义具有多个隐式参数的函数

    如何定义具有多个隐式参数的函数 def myfun arg String implicit p1 String implicit p2 Int doesn t work 它们必须全部放入一个参数列表中 并且该列表必须是最后一个 def my
  • mssql 的 UUID 疯狂

    我的数据库条目有一个 UUID 及其值 使用 Microsoft SQL Server Management Studio 提取 CDF86F27 AFF4 2E47 BABB 2F46B079E98B 将其加载到我的 Scala 应用程序
  • JavaFX 控制器如何访问其他服务?

    我将 JavaFX 2 与 Scala 一起使用 我有class Application extends javafx application Application它执行诸如读取应用程序配置等操作 然后它会启动主窗口 该主窗口需要连接到一
  • 如何在 Scala 中跳过可选参数?

    给定以下带有可选参数的函数 def foo a Int 1 b Int 2 c Int 3 我想保留默认值a但将新值传递给b and c仅通过位置赋值 而不是通过命名赋值 即以下任何语法都可以 foo 5 7 foo 5 7 Scala 可
  • 在 Akka Actor 中使用 Future

    我刚刚开始学习 Scala 中的 Akka Actors 我的理解是 Actor 收到的消息会在 Actor 的邮箱中排队 并一次处理一个 通过一次处理一条消息 可以缓解并发问题 竞争条件 死锁 但是 如果 Actor 创建一个 futur
  • 首次使用 SBT - 检索代理背后的依赖项时出现问题

    我已经下载了 SBT sbt 0 13 15 zip 并将其解压缩 但在运行 sbt bat 时遇到问题 最初 我遇到了代理问题 当我发现需要指定时修复了这些问题onlyhttpsconfig 而不是 http 的 当提供两者时 它使用的是

随机推荐