Я пытаюсь протестировать следующую строку кода, используя ScalaTest и ScalaMock.
val responseFuture = wsClient.url(url).withQueryString(params: _*).get()
Тип wsClient — это THttpClient, который является оболочкой play.api.libs.ws.WS.
Учитывая, что:
val mockHttpClient = mock[THttpClient]
правильно введен в мой тестируемый класс, тестовый код выглядит примерно так:
val expectedUrl = "some url"
val mockRequestHolder = mock[WSRequestHolder]
inSequence {
(mockHttpClient.url _).expects(expectedUrl).returns(mockRequestHolder)
(mockRequestHolder.withQueryString _).expects(where {
(parameters: Seq[(String, String)]) => {
// assertions on parameters
// ...
true
}
}).returns(mockRequestHolder)
val stubResponse = stub[WSResponse]
val jsonBody = "{}"
(stubResponse.json _).when().returns(Json.parse(jsonBody))
(mockRequestHolder.get _).expects().returns(Future(stubResponse))
}
IntelliJ выделяет mockRequestHolder.get как сообщение об ошибке: не удается разрешить получение символа. Тем не менее, я могу запустить тест, но макет явно не работает, и я получаю: java.util.NoSuchElementException: JsError.get.
Макет работает, когда я пытаюсь издеваться над любым другим методом WSRequestHolder, но не с методом get.
Это ошибка ScalaMock или я что-то не так делаю?