2014-12-12 2 views
0

스케이프를 사용하여 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에 대한 제한이 있습니까?

+0

여기서 무슨 일이 일어나는지는 당연하지 않습니다. 문제를 재현하는 작은 프로젝트를 통해 버그 (https://github.com/paulbutcher/ScalaMock/issues)를보고 해 주실 수 있습니까? –

+0

알겠습니다. 완료 : https://github.com/paulbutcher/ScalaMock/issues/87 – DrewEaster

답변

0

이 문제는 ScalaMock-3.2.1에서 수정되었습니다.