4
abstract trait MyApi {

  def getResult()(implicit ec: ExecutionContext): Future[String]

}

以下不起作用

val m = mock[MyApi]
(m.getResult _).expects() returning "..."

它失败了:

java.lang.ClassCastException: org.scalamock.MockFunction1 cannot be cast to org.scalamock.MockFunction0

注意:http ://scalamock.org/user-guide/advanced_topics/ 中给出的示例仅在该方法具有至少一个参数时才有用。所以我们不能像在使用 scalamock 的 scala 中使用 ClassTag 的模拟方法那样使用该解决方案

4

2 回答 2

11

我猜你没有看正确的例子。查看示例 4 中的隐式参数:

class Codec()

trait Memcached {
  def get(key: String)(implicit codec: Codec): Option[Int]
}

val memcachedMock = mock[Memcached]

implicit val codec = new Codec
(memcachedMock.get(_ : String)(_ : Codec)).expects("some_key", *).returning(Some(123))

当然,在您的情况下,非隐式参数为空,因此您想要:

(m.getResult()(_: ExecutionContext)).expects(*) returning "..."
于 2015-05-26T21:20:14.463 回答
1

只是为了完成案件。如果有人尝试对更多参数执行相同操作,则代码段如下:

trait MemcachedV2 {
   def get(key: String, value: String)(implicit codec: Codec): Option[Int]
}

val memcachedMock2 = mock[MemcachedV2]

(memcachedMock2.get(_, _)(_))
   .expects("some_key","another value", *)
   .returning(Some(123))
于 2022-01-11T16:17:09.003 回答