使用Iterator参数验证函数调用

时间:2015-12-21 17:06:48

标签: scala specs2

我有一个函数,它将UserDBModel.findOne({ '_id': uid }, 'notifications', function (err, notifications) { if (err) return handleError(err); console.log(notifications.length); }) 作为参数,我想在测试中验证。

Iterator[T]

如果底层迭代器类型不匹配,那么该测试显然会失败。也无法使用常规匹配器检查值。 是否可以撤回函数调用的参数以便以常规方式匹配它们?

1 个答案:

答案 0 :(得分:1)

您可以使用Mockito的ArgumentCaptor

首先,创建一个辅助方法:

def captor[T: ClassTag]: ArgumentCaptor[T] = ArgumentCaptor.forClass(implicitly[ClassTag[T]].runtimeClass.asInstanceOf[Class[T]])

它不是必需的,但我认为使用它时看起来更好。

然后,像这样设置你的模拟:

val myList = captor[Iterator[Int]]
myMock.foo(myList.capture) returns 7

最后,检查传递的参数:

myList.getValue // this will be the argument that was passed to `foo`

拥有此值可以做断言。