我在使用scalamock在Play WS库中的WSRequestHolder中存根post()
方法时遇到了麻烦。
以下是我正在尝试的内容:
(request.post[Results.EmptyContent](_ : Results.EmptyContent)(_ : Writeable[Results.EmptyContent], _: ContentTypeOf[Results.EmptyContent])) when(Results.EmptyContent(), *,*) returns Future.successful(response)
目标是在使用Future.successful(response)
调用post()
时返回Results.EmptyContent
。
我得到的编译器错误是:
当不是(play.api.mvc.Results.EmptyContent, play.api.http.Writeable [play.api.mvc.Results.EmptyContent] play.api.http.ContentTypeOf [play.api.mvc.Results.EmptyContent])=> scala.concurrent.Future [play.api.libs.ws.WSResponse] (request.post [Results.EmptyContent](_:Results.EmptyContent)(_:可写[Results.EmptyContent],_: ContentTypeOf [Results.EmptyContent]))。当(Results.EmptyContent(), ,)返回Future.successful(响应)
知道我做错了吗?
更新
这里有一些我不太懂的东西。如果我定义以下特征:
trait TestTrait {
def post[T](data: T)(implicit wrt: Writeable[T], ct: ContentTypeOf[T]): Future[WSResponse]
}
其post()
方法与WSRequestHolder.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 :(得分:0)
此问题已在ScalaMock-3.2.1中修复