스케이프를 사용하여 Play WS 라이브러리의 WSRequestHolder에서 post()
메서드를 스텁하는 데 문제가 있습니다.스라맥킹을 사용하여 WSRequestHolder.post()를 스텁에 넣을 수 있습니다.
는 여기에 내가 시도하고있는 작업은 다음과 같습니다
(request.post[Results.EmptyContent](_ : Results.EmptyContent)(_ : Writeable[Results.EmptyContent], _: ContentTypeOf[Results.EmptyContent])) when(Results.EmptyContent(), *,*) returns Future.successful(response)
목적은 post()
가 Results.EmptyContent
으로 호출 될 때 Future.successful(response)
을 반환하는 것입니다.
내가 갖는 컴파일러 오류는 다음과 같습니다 (play.api.mvc.Results.EmptyContent, play.api.http.Writeable [play.api의 구성원이 아닌
값. [play.api.mvc.Results.EmptyContent]) => scala.concurrent.Future [play.api.libs.ws.WSResponse] [Results.EmptyContent] (_ : Writeable [Results.EmptyContent], _ : ContentTypeOf [Results.EmptyContent])). 언제 (Results.EmptyContent(), ,)가 Future.successful을 반환합니다 (응답)
내가 뭘 잘못하고 있는지 아는 사람이 있습니까?
UPDATE
뭔가 내가 정말 이해가되지 않는 일이 일어나고있다. 나는 다음과 같은 특성을 정의하는 경우 :
trait TestTrait {
def post[T](data: T)(implicit wrt: Writeable[T], ct: ContentTypeOf[T]): Future[WSResponse]
}
WSRequestHolder.post()
과 동일한 서명을 가진 post()
방법을 가지고, 나는 성공적으로 스텁 수 있습니다. 따라서이 문제에서 나타나는 WSRequestHolder.post()
에 특이한 이상한 점이 있습니다. 형식 유추와 관련하여 약간의 뉘앙스가있을 수 있습니다.
업데이트 2
그래서, 내가 해결 방법을 찾았습니다. 내 테스트에서, 나는 새로운 WSRequestHolder
를 확장 특성 정의 : 내 테스트에서
trait StubbableWSRequestHolder extends WSRequestHolder {
override def post[T](data: T)(implicit wrt: Writeable[T], ct: ContentTypeOf[T]): Future[WSResponse] =
withMethod("POST").withBody(body).execute()
}
을,이 특성에서 내 스텁을 만들 수 있습니다. 보다시피, WSRequestHolder
과 달리 post()
에 대한 내 재정의 서명은 Future[WSResponse]
의 반환 유형에 대해 명시 적입니다.
여기 정확히 무슨 일이 벌어지고 있는가에 대한 질문은 여전히 남아 있습니다. 타입 유추와 관련하여 scalamock에 대한 제한이 있습니까?
여기서 무슨 일이 일어나는지는 당연하지 않습니다. 문제를 재현하는 작은 프로젝트를 통해 버그 (https://github.com/paulbutcher/ScalaMock/issues)를보고 해 주실 수 있습니까? –
알겠습니다. 완료 : https://github.com/paulbutcher/ScalaMock/issues/87 – DrewEaster