Scala + Mockitoで入れ子のフィールドをモック


下記コードのようにmockメソッドの引数に設定情報を渡してやると、入れ子のフィールドをモックできます。

import org.specs2.mock.Mockito

object Main extends App with Mockito {
  import org.mockito.Answers
  import org.mockito.Mockito.withSettings

  case class Hoge(fuga: Fuga)
  case class Fuga(fuge: String)
  
  val hoge = mock[Hoge](withSettings.defaultAnswer(Answers.RETURNS_DEEP_STUBS))
  hoge.fuga.fuge returns "f u g e"
  println(hoge.fuga.fuge) // f u g e
}

(もし仮に単にval hoge = mock[Hoge]と書いてhogeを定義してやると、Null Pointer Exceptionになります。)