使用`call-by-name`参数模拟方法时,不会调用`answers`

时间:2015-03-15 09:15:39

标签: mocking mockito specs2 callbyname

有一个班级InvokeLater,定义如下:

class InvokeLater {
    def apply(f: => Any): Unit = { 
       // do something ...
       f 
       // do some other thing
    }
}

在规格测试中,我嘲笑它:

val invokeLater = mock[InvokeLater]
invokeLater.apply(any) answers { f => f:Unit }

但似乎answers内的代码永远不会运行。

specs2现在是否支持此功能?

1 个答案:

答案 0 :(得分:1)

首先,您需要确保specs2-mock.jar放在类路径mockito.jar之前。然后请注意,传递给f方法的answersFunction0。例如

class InvokeLater {
  def apply(f: =>Int): Unit = {
    // do something ...
    f
    // do some other thing
  }
}

val invokeLater = mock[InvokeLater]

invokeLater.apply(any) answers { f =>
  println("got the value "+f.asInstanceOf[Function0[Int]]())
}

invokeLater.apply(1)

打印:

got the value 1