Sto attraversando un periodo difficile per capire come scrivere i test in Scala quando sono coinvolti i parametri impliciti.Scala test di simulazione di parametri impliciti?
Ho il seguente (versione corta) del mio codice e test:
attuazione (Scala 2.10, Spray e Akka):
import spray.httpx.SprayJsonSupport._
import com.acme.ResultJsonFormat._
case class PerRequestIndexingActor(ctx: RequestContext) extends Actor with ActorLogging {
def receive = LoggingReceive {
case AddToIndexRequestCompleted(result) =>
ctx.complete(result)
context.stop(self)
}
}
object ResultJsonFormat extends DefaultJsonProtocol {
implicit val resultFormat = jsonFormat2(Result)
}
case class Result(code: Int, message: String)
Test (Usando ScalaTest e Mockito):
"Per Request Indexing Actor" should {
"send the HTTP Response when AddToIndexRequestCompleted message is received" in {
val request = mock[RequestContext]
val result = mock[Result]
val perRequestIndexingActor = TestActorRef(Props(new PerRequestIndexingActor(request)))
perRequestIndexingActor ! AddToIndexRequestCompleted(result)
verify(request).complete(result)
}
}
Questa riga, verify(request).complete(result)
utilizza un marshaller implicito per trasformare Result
in JSON.
Posso portare un marshaller in ambito aggiungendo implicit val marshaller: Marshaller[Result] = mock[Marshaller[Result]]
ma quando eseguo il test viene utilizzata un'istanza diversa di Marshaller, quindi la verifica ha esito negativo.
Anche il passaggio esplicito del simulatore Marshaller a complete
non riesce.
Quindi, qualcuno può consigliare come creare un oggetto fittizio per un parametro implicito e assicurarsi che l'istanza sia quella utilizzata?
Come fa il passaggio esplicito della simulazione fallita? Perché dovresti voler usare un finto marshaller in primo luogo? (Non ho usato il mockito quindi per favore scusami se quelle sono domande stupide) – jrudolph