【发布时间】:2015-10-26 17:31:19
【问题描述】:
我正在尝试使用 ScalaTest 和 ScalaMock 测试以下代码行。
val responseFuture = wsClient.url(url).withQueryString(params: _*).get()
wsClient 类型是THttpClient,它是play.api.libs.ws.WS 的包装器。
鉴于:
val mockHttpClient = mock[THttpClient]
被正确注入到我的测试类中,测试代码是这样的:
val expectedUrl = "some url"
val mockRequestHolder = mock[WSRequestHolder]
inSequence {
(mockHttpClient.url _).expects(expectedUrl).returns(mockRequestHolder)
(mockRequestHolder.withQueryString _).expects(where {
(parameters: Seq[(String, String)]) => {
// assertions on parameters
// ...
true
}
}).returns(mockRequestHolder)
val stubResponse = stub[WSResponse]
val jsonBody = "{}"
(stubResponse.json _).when().returns(Json.parse(jsonBody))
(mockRequestHolder.get _).expects().returns(Future(stubResponse))
}
IntelliJ 将 mockRequestHolder.get 突出显示为错误消息:无法解析符号获取。尽管如此,我还是能够运行测试,但模拟显然不起作用,我得到:java.util.NoSuchElementException: JsError.get.
当我尝试模拟 WSRequestHolder 的任何其他方法时,模拟工作正常,但不适用于方法 get。
这是 ScalaMock 错误还是我做错了什么?
【问题讨论】:
标签: scala testing playframework scalatest scalamock