4

ケースクラスで 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

2 つのバイト配列の参照が等しくないため、明らかにこれは失敗します。私がやりたいことは、テスト ケース コードを変更せずにケース クラスを保持することなく、何とかこれを機能させることです。

それは可能ですか?(カスタム equals メソッドをケース クラスに追加するようなものですか?)

4

1 に答える 1

2

解決策を見つけました。どうやらケースクラスでequalsメソッドをオーバーライドできるようです

Scala: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
  }
}
于 2012-10-22T21:21:47.877 に答える