2011-07-20 12 views
5

He intentado un par de cosas que parecen compilar pero lanzo excepciones de NullPointer durante las pruebas unitarias, así que me pregunto cómo podría superar las limitaciones de las pruebas unitarias. Tengo una clase que se parece a esto:Usando Mokito para burlarse del objeto de registro del actor Akka

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)) 
    } 
} 

Pero el intento de probar la unidad utilizando Specs2 y el apoyo Mockito con algo en la línea de:

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 
} 

durante la compilación de resultados en la mencionada 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) 

he intentado cambiar a utilizar algún rasgo mixin, que pesaban más que las "log" objeto de la Akka Logging rasgo pero el compilador no lo permití La respuesta del compilador fue algo así como "no queremos que cometas un error inadvertido". ¡Uf! Quiero ese "error".

¿Alguien sabe de otra manera? No estoy apegado a Mockito y acepto cualquier sugerencia.

Respuesta

Cuestiones relacionadas