2011-07-20 10 views
5

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.

Odpowiedz

Powiązane problemy