使用“按名称调用”参数模拟方法时,不会调用“answers”
`answers` is not invoked when mocking a method with `call-by-name` parameter
有一个classInvokeLater
,定义是这样的:
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 现在支持这个功能吗?
首先,您需要确保 specs2-mock.jar
位于类路径中的 mockito.jar
之前。然后注意传递给answers
方法的f
是一个Function0
。例如
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
有一个classInvokeLater
,定义是这样的:
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 现在支持这个功能吗?
首先,您需要确保 specs2-mock.jar
位于类路径中的 mockito.jar
之前。然后注意传递给answers
方法的f
是一个Function0
。例如
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