Cette question est une extension du problème résolu mentionné au https://github.com/paulbutcher/ScalaMock/issues/79Scalamock: Impossible de fonction simulée avec paramètre typé et plusieurs variables implicites
Je le trait suivant à la maquette:
trait HttpClient{
def deserialize[T](response: HttpResponse)
(implicit um: Unmarshaller[ResponseEntity, T],
executionContext: ExecutionContext): Future[T]
}
Je suis en essayant de se moquer de la HttpClient comme suit
val client = mock[HttpClient]
case class SomeTypeT(name:String, id:Int)
implicit val someTypeTFormat = jsonFormat2(SomeTypeT) // to be able to marshal and unmarshal from JSON
(httpClient.deserialize[SomeTypeT](_: HttpResponse))
.expects(where {
(response: HttpResponse) => {
response.entity == ent
}
})
.returns(Unmarshal(response.entity).to[SomeTypeT])
le problème se produit lorsque je tente de se moquer de la fonction deserialize. Comme ci-dessus, la méthode deserialize
est constituée d'un paramètre typé T
et d'un paramètre unique de type HttpResponse
, et de 2 autres paramètres implicites utilisés lors du démariage de la réponse.
La question, par conséquent, est de savoir comment utiliser ScalaMock pour simuler la fonction deserialize
et spécifier plusieurs paramètres implicites tout en se moquant. Cela ne fonctionne pas
// Both UnMarshaller & ExecutionContext are available here as implicits
(httpClient.deserialize[SomeTypeT](_: HttpResponse)(_: Unmarshaller[ResponseEntity, SomeTypeT](_: ExecutionContext))
Le problème est que je ne peux pas utiliser _
pour spécifier les paramètres implicites. Et je ne sais pas comment y parvenir. S'il vous plaît aider comment se moquer de la fonction
donné que je utilise les bibliothèques suivantes:
- version 2.11.8 scala
- version 3.0.0 scalatest
- scalamock Version 3.5.0
Alors que la seconde tentative ne compile pas même en raison de plusieurs _
utilisés, le premier entraîne l'exception suivante:
org.scalamock.function.MockFunction3 cannot be cast to org.scalamock.function.MockFunction1
java.lang.ClassCastException: org.scalamock.function.MockFunction3 cannot be cast to org.scalamock.function.MockFunction1
Merci beaucoup. Il me manquait d'ajouter les mêmes paramètres implicites dans l'instruction where comme vous l'avez souligné à juste titre. – Agraj