我正在尝试在案例类上使用 should 匹配器

case class ListOfByteArrayCaseConfig(

  @BeanProperty
  permissions: java.util.List[Array[Byte]]

)

使用以下测试用例
val orig = ListOfByteArrayCaseConfig(List(Array[Byte](10, 20, 30)))
val orig2 = ListOfByteArrayCaseConfig(List(Array[Byte](10, 20, 30)))

orig2 should be === orig

显然这会失败,因为两个字节数组在引用方面不相等。我想要做的是在不更改测试用例代码并仍然保留用例类的情况下以某种方式完成这项工作。

甚至有可能吗? (比如向 case 类添加自定义 equals 方法?)

最佳答案

我找到了解决方案。显然我可以覆盖 case 类中的 equals 方法

Scala: Ignore case class field for equals/hascode?

尽管它首先摆脱了使用案例类的原因,即简化数据对象。

case class ListOfByteArrayCaseConfig(

  @BeanProperty
  permissions: java.util.List[Array[Byte]]

) {

  override def equals(arg: Any): Boolean = {

    val obj = arg.asInstanceOf[ListOfByteArrayCaseConfig]
    var i: Int = 0
    for (i <- 0 until permissions.size()) {
      if (!util.Arrays.equals(permissions.get(i), obj.permissions.get(i))) {
        return false
      }
    }
    return true
  }
}

关于scala - 案例类等于字节数组列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13019835/

10-10 15:14