Mockito Scala规范2模拟复杂函数(Play框架)

Mockito Scala规范2模拟复杂函数(Play框架),scala,mockito,specs2,Scala,Mockito,Specs2,我正在尝试正确地存根Play Framework使用的ehCache API。特别是其带有签名的getOrElse函数: def getOrElse[A: ClassTag](key: String, expiration: Duration)(orElse: => A) 在我的specs 2代码中,我有: val mockCache = mock[EhCacheApi] mockCache.getOrElse[???](anyString,anyObject[Duration])(?

我正在尝试正确地存根Play Framework使用的ehCache API。特别是其带有签名的getOrElse函数:

def getOrElse[A: ClassTag](key: String, expiration: Duration)(orElse: => A) 
在我的specs 2代码中,我有:

val mockCache = mock[EhCacheApi]
mockCache.getOrElse[???](anyString,anyObject[Duration])(???) returns 
[Object I'd like returned]
问题是,是否有可能使用匹配器来匹配???部分,特别是咖喱争论部分

CacheApi函数的返回类型应为Future[Seq[Object]]

公共git回购链接:

这很有效

class VariationAssignmentSpec(implicit ee: ExecutionEnv) extends PlaySpecification with Mockito {

  case class Variation(id: Option[Long] = None)

  lazy val v1 = Variation(Option(1L))
  lazy val v2 = Variation(Option(2L))

  "Cache#getOrElse" should {
    "return correct result" in {

      val mockCache = mock[CacheApi]

      mockCache.getOrElse[Future[Seq[Variation]]](anyString, any[Duration])(any)(any) returns
        Future(Seq(v1, v2))

      val resultFuture: Future[Seq[Variation]] =
        mockCache.getOrElse("cache.key", 10.seconds)(Future(Seq(v1,v2)))

      resultFuture must equalTo(Seq(v1,v2)).await
    }
  }

}
这很有效

class VariationAssignmentSpec(implicit ee: ExecutionEnv) extends PlaySpecification with Mockito {

  case class Variation(id: Option[Long] = None)

  lazy val v1 = Variation(Option(1L))
  lazy val v2 = Variation(Option(2L))

  "Cache#getOrElse" should {
    "return correct result" in {

      val mockCache = mock[CacheApi]

      mockCache.getOrElse[Future[Seq[Variation]]](anyString, any[Duration])(any)(any) returns
        Future(Seq(v1, v2))

      val resultFuture: Future[Seq[Variation]] =
        mockCache.getOrElse("cache.key", 10.seconds)(Future(Seq(v1,v2)))

      resultFuture must equalTo(Seq(v1,v2)).await
    }
  }

}

我得到了“缺少在对象未来中应用方法的参数,如果您想将其视为部分应用的函数,请在这个方法后面加上``”,我的模拟行如下所示:mockCache.getOrElse[Future[Seq[Variation]]](anyString,any[Duration])(==(Future[Seq[Variation]])返回Future(Seq(v1,v2我想我对什么是“a”感到困惑应为getOrElse[A]。很抱歉,我忘记传递
orElse
参数。我希望这能起作用,因为使用Mockito时,byname参数有点棘手。如果仍然不起作用,并且您的项目是公开的,请将链接发布到您的repo。第二个
any
匹配隐式
ClassTag
“缺少在对象未来中应用方法的参数,如果您想将其视为部分应用的函数,请在该方法后面加上``”,我的模拟行如下所示:mockCache.getOrElse[Future[Seq[Variation]]](anyString,any[Duration])(===(Future[Seq[Variation]])返回Future(Seq(v1,v2我想我对“a”是什么感到困惑“应为getOrElse[A]。很抱歉,我忘记传递
orElse
参数。我希望这能起作用,因为使用Mockito时,byname参数有点棘手。如果仍然不起作用,并且您的项目是公开的,请将链接发布到您的repo。第二个
any
匹配隐式
类标记。