У меня есть класс, который расширяет черту LazyLogging
class TaskProcessor()
extends Processor
with LazyLogging {
def a1() = {
logger.info("Test logging")
}
}
Теперь я хочу проверить, работает ли моя регистрация. Поэтому я последовал этому примеру Сообщения регистратора модульных тестов, используя specs2 + scalalogging и написал свой тест следующим образом
"TaskProcessor" should "test logging" in {
val mockLogger = mock[Logger]
val testable = new TaskProcessor {
override val logger: Logger = mockLogger
}
verify(mockLogger).info("Test logging")
}
Я получаю следующую ошибку
Error:(32, 20) overriding lazy value logger in trait LazyLogging of type com.typesafe.scalalogging.Logger;
value logger must be declared lazy to override a concrete lazy value
override val logger: Logger = mockLogger
Чтобы устранитьПри этом я изменяю оператор
override val logger: Logger = mockLogger
на
override lazy val logger: Logger = mockLogger
Я получаю следующую ошибку
Cannot mock/spy class com.typesafe.scalalogging.Logger
Mockito cannot mock/spy following:
- final classes
- anonymous classes
- primitive types
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class com.typesafe.scalalogging.Logger
Mockito cannot mock/spy following:
- final classes
- anonymous classes
- primitive types
at org.scalatest.mockito.MockitoSugar.mock(MockitoSugar.scala:73)
at org.scalatest.mockito.MockitoSugar.mock$(MockitoSugar.scala:72)
Мои зависимости следующие:
"org.scalatest" %% "scalatest" % "3.0.5" % "test",
"org.mockito" % "mockito-all" % "1.10.19" % Test,
"com.typesafe.scala-logging" %% "scala-logging" % "3.9.2",
Может кто-нибудь подсказать мне, как я могу издеваться над регистратором и проводить тестирование.