私は遊びを持っています!2 アプリケーション (Scala) があり、エラーが発生したときにログを記録する必要があるクラスがいくつかあります。
これらのロギング アクションが実際に適切な条件で行われることを単体テストできるようにしたいと考えています。そのためには、ロガーをモックできる必要がありますが、Mockito でいくつかの問題が発生しています。私が持っているもの(簡略化)は次のようになります
import play.api.{ Logger, LoggerLike }
trait BaseService {
val log: LoggerLike
def fail(reason: String) {
log.error(reason)
}
}
object Service extends BaseService {
val log = Logger
}
そしてテストで
import org.specs2.mutable._
import org.specs2.mock._
import services.BaseService
object Service extends BaseService with Mockito {
val log = mock[play.api.Logger]
def verify(key: String) = {
there was one(log).error(key)
}
}
class ServiceSpec extends Specification {
"failures should be logged" in {
Service.fail("foo")
Service.verify("foo")
}
}
しかし、私はエラーが発生します
[error] NullPointerException: null (Logger.scala:43)
[error] play.api.LoggerLike$class.isErrorEnabled(Logger.scala:43)
[error] play.api.Logger.isErrorEnabled(Logger.scala:147)
[error] play.api.LoggerLike$class.error(Logger.scala:127)
[error] play.api.Logger.error(Logger.scala:147)
[error] services.BaseService$class.fail(Service.scala:19)
[error] Service$.fail(ServiceSpec.scala:11)
...
追加してみました
log.isErrorEnabled returns true
log.error(any[String]) returns {}
しかし、サービスの初期化さえ失敗します。