【问题标题】:How can I use scalamock to stub WSRequestHolder.post() in Play如何在 Play 中使用 scalamock 存根 WSRequestHolder.post()
【发布时间】:2014-12-16 05:33:20
【问题描述】:

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

这是我正在尝试的:

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

目的是在使用Results.EmptyContent 调用post() 时返回Future.successful(response)

我得到的编译器错误是:

值当不是 (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(), ,) 返回 Future.successful(response)

知道我做错了什么吗?


更新

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

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

【问题讨论】:

标签: scala playframework scalamock


【解决方案1】:

ScalaMock-3.2.1 中已修复此问题

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    相关资源
    最近更新 更多