如何使用 scalamock 在游戏中存根 WSRequestHolder.post()



我在使用 scalamock 在 Play WS 库中的 WSRequestHolder 中存根 post() 方法时遇到问题。

这是我正在尝试的:

(request.post[Results.EmptyContent](_ : Results.EmptyContent)(_ : Writeable[Results.EmptyContent], _: ContentTypeOf[Results.EmptyContent])) when(Results.EmptyContent(), *,*) returns Future.successful(response)

目的是在调用post()时返回Future.successful(response) 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((_ : Writeable[Results.EmptyContent], _: ContentTypeOf[Results.EmptyContent]((.when(Results.EmptyContent((, (返回未来.成功(响应(

知道我做错了什么吗?


更新

这里发生了一些我不太明白的事情。如果我定义以下特征:

  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 在类型推断方面的某种限制吗?

此问题已在 ScalaMock-3.2.1 中修复

相关内容

  • 没有找到相关文章