我有一个函数,它将UserDBModel.findOne({ '_id': uid }, 'notifications', function (err, notifications) {
if (err) return handleError(err);
console.log(notifications.length);
})
作为参数,我想在测试中验证。
Iterator[T]
如果底层迭代器类型不匹配,那么该测试显然会失败。也无法使用常规匹配器检查值。 是否可以撤回函数调用的参数以便以常规方式匹配它们?
答案 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`
拥有此值可以做断言。