Использование Mokito чтобы имитировать объект журнала Akka Actor

Я пробовал несколько вещей, которые, похоже, компилируются, но выдают исключения NullPointer во время модульного тестирования, поэтому мне интересно, как я могу потенциально преодолеть ограничения в модульном тестировании. У меня есть класс, который выглядит следующим образом:

class LogWriter extends Actor{
  def receive{
    case x:Timing => log.info(x toString)
    case x:Event => log.info(x toString)
    case x:Any => log.warning("Improper message sent to LogWriter, %s".format(x toString))
  }
}

Но я пытаюсь выполнить модульное тестирование с использованием Specs2 и поддержки Mockito с чем-то вроде:

class LogWriterSpec extends Mokito with Specification{
  val mockedLog = mock[Logger]

  class MockedLogWriter extends LogWriter{
    @transient override val log = mockedLog
  }

  val writer = actorOf(new MockedLogWriter).start

  def testTiming = {
    val message = Timing("testTiming", 15 seconds)
    writer !! (message, 400)
    there was one(mockedLog).info(message toString)
  }

  def is = "A LogWriter" ^
    "should write a Timing message to log.info" ! testTiming ^
  end
}

при компиляции результатов в вышеупомянутом NullPointerException :

[akka:event-driven:dispatcher:global-10] ERROR akka.actor.Actor$ - Problem
java.lang.NullPointerException
    at akka.util.Logger.warning_$qmark(Logging.scala:43)
    at akka.util.Logger.warning(Logging.scala:117)

Я попытался изменить его, чтобы использовать какой-то трейт mixin, который перекрыл объект "log" трейта Akka Logging , но компилятор не разрешил этого. Ответ компилятора был примерно таким: «Мы не хотим, чтобы вы допустили непреднамеренную ошибку». Ух! Я хочу эту «ошибку».

Кто-нибудь знает другой способ? Я не зацикливаюсь на Mockito и приветствую любые предложения.

5
задан skaffman 31 July 2011 в 10:18
поделиться