1
我有一个玩! 2应用程序(Scala),在那里我有一些需要在出现错误时执行日志记录的类。玩游戏的嘲笑记录器! 2框架
我希望能够单元测试这些日志记录操作实际发生在正确的条件下。要做到这一点,我需要能够模拟记录器,但我遇到了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 {}
但那么甚至是Service fa的初始化ILS。
谢谢,这正是问题!现在还有待澄清如何解决名副其实的问题。您发布的问题中的解决方案看起来有点难看,但希望我能够将其按摩到更清晰的地方。 – Andrea