Próbowałem kilku rzeczy, które wydają się kompilować, ale wyrzucają wyjątki NullPointer podczas testowania jednostkowego, więc zastanawiam się, jak mogę potencjalnie pokonać ograniczenia w testowaniu jednostkowym. Mam klasy, która wygląda tak:Używanie Mokito do wykreślenia obiektu logu Akka Actor
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))
}
}
Ale próby badanej jednostki przy użyciu Specs2 i wsparcie Mockito coś wzdłuż linii:
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
}
podczas kompilacji wyników w wyżej wymienionym 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)
Próbowałem zmieniając go użyć trochę wstawionej cechę, która overrode „log” przedmiot Akka Logging
cechę ale kompilator na to nie pozwoliłem. Odpowiedź kompilatora była czymś w rodzaju: "nie chcemy, abyś popełnił nieumyślny błąd". Ugh! Chcę tego "błędu".
Ktoś wie inny sposób? Nie utknąłem w Mockito i nie przyjmowałem żadnych sugestii.
Dzięki temu sprawię, że się obejrzę. – wheaties