J'ai du mal à comprendre comment écrire des tests dans Scala lorsque des paramètres implicites sont impliqués.Scala teste des paramètres implicites?
Je donne les résultats suivants (version courte) de mon code et test:
mise en œuvre (Scala 2.10 Spray et 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 (En utilisant ScalaTest et 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)
}
}
Cette ligne, verify(request).complete(result)
utilise un Marshaller implicite pour transformer Result
en JSON.
Je peux amener un marshaller dans la portée en ajoutant implicit val marshaller: Marshaller[Result] = mock[Marshaller[Result]]
mais lorsque j'exécute le test, une instance différente de Marshaller est utilisée, donc la vérification échoue.
Échec du passage explicite du faux Marshaller à complete
. Donc, quelqu'un peut-il conseiller comment créer un objet fantaisie pour un paramètre implicite et s'assurer que cette instance est celle utilisée?
Comment le passage explicite de la simulation échoue-t-il? Pourquoi voudriez-vous utiliser un simulateur de marshaller en premier lieu? (Je n'ai pas utilisé mockito alors s'il vous plaît excusez-moi si ce sont des questions stupides) – jrudolph