Этот вопрос является расширением решенной проблемы, упомянутой в https://github.com/paulbutcher/ScalaMock/issues/79
У меня есть следующая черта, чтобы издеваться:
trait HttpClient{
def deserialize[T](response: HttpResponse)
(implicit um: Unmarshaller[ResponseEntity, T],
executionContext: ExecutionContext): Future[T]
}
Я пытаюсь издеваться над HttpClient следующим образом
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])
Проблема возникает, когда я пытаюсь смоделировать функцию десериализации. Как и выше, метод deserialize
состоит из типизированного параметра T
и одного параметра типа HttpResponse
, а также еще двух неявных параметров, используемых при разборе ответа.
Таким образом, вопрос заключается в том, как использовать ScalaMock для имитации функции deserialize
и указания нескольких неявных параметров во время имитации. Это не работает
// Both UnMarshaller & ExecutionContext are available here as implicits
(httpClient.deserialize[SomeTypeT](_: HttpResponse)(_: Unmarshaller[ResponseEntity, SomeTypeT](_: ExecutionContext))
Проблема в том, что я не могу использовать _
для указания обоих неявных параметров. И я не знаю, как этого добиться. Пожалуйста, помогите, как издеваться над данной функцией
Я использую следующие библиотеки:
- Скала версии 2.11.8
- скорейшая версия 3.0.0
- скаламок версии 3.5.0
Хотя вторая попытка даже не компилируется из-за использования нескольких _
, первая приводит к следующему исключению:
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