Scala Specs2 Mockito : Argument matchers with complex types

标签 scala playframework-2.0 mockito matcher specifications

我正在尝试使用 Mockito 为 Web 服务编写一个模拟。模拟应使用 play WS 库模拟 POST 请求。

/**
 * Mock for the  Web Service
 */
case class WSMock() extends Mockito {
  val wsRequestHolder: play.api.libs.ws.WS.WSRequestHolder = mock[play.api.libs.ws.WS.WSRequestHolder]

  val wsResponse: play.api.libs.ws.Response = mock[play.api.libs.ws.Response]
  wsResponse.status returns 200
  wsResponse.body returns "BODY RESP FROM WS"

  val futureResponse = scala.concurrent.Future { wsResponse }

  wsRequestHolder.post(any[Map[String,Seq[String]]]) returns futureResponse
}

运行测试时出现以下错误:

[error]     InvalidUseOfMatchersException: 
[error] Invalid use of argument matchers!
[error] 3 matchers expected, 1 recorded:
[error] -> at org.specs2.mock.mockito.MockitoMatchers$class.any(MockitoMatchers.scala:24)
[error] 
[error] This exception may occur if matchers are combined with raw values:
[error]     //incorrect:
[error]     someMethod(anyObject(), "raw String");
[error] When using matchers, all arguments have to be provided by matchers.
[error] For example:
[error]     //correct:
[error]     someMethod(anyObject(), eq("String by matcher"));
[error] 
[error] For more info see javadoc for Matchers class.

在我看来,使用复杂类型(带有嵌套类型参数)的any[...] 表达式无法正确解析为匹配器。但是,我不知道原始类型在哪里发挥作用。 为参数 Map[String,Seq[String]] 指定此类匹配器的正确方法是什么?

非常感谢!

最佳答案

wsRequestHolder.post(any[Map[String,Seq[String]]]) returns futureResponse

请注意,post 实际上有几个额外的隐式参数:

def post [T] (body: T)(implicit wrt: Writeable[T], ct: ContentTypeOf[T]):
    Promise[Response]

...可能需要显式匹配,如this spec2-users thread .

关于Scala Specs2 Mockito : Argument matchers with complex types,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19157783/

相关文章:

java - 使用 Mockito 模拟抽象类中的静态方法

scala - 使用Scala为geo_point明确映射

eclipse - Scala、Maven、Sbt 和 Eclipse

java - @implicit Lang 升级到 2.1.0 后无法在模板中工作

java - Spring ResultSetExtractor 的代码覆盖率问题

java - Mockito:模拟 "Blackbox"依赖项

java - 如何将 long (currentTimeInMillis) 转换为 UTC 时间戳?

scala - 如何从 Kotlin 调用 Scala 密封特征?

scala - 为什么 Scala 找不到参数 scala.slick.session.Session 的隐式值?

scala - 使用 Scala 的 Play 2.x 应用程序中的 Spring Data Neo4j