java callback参数_mockitocallback和获取参数值

mockitocallback和获取参数值

我没有任何运气让Mockito捕捉函数参数值! 我嘲笑search引擎索引,而不是build立一个索引,我只是使用散列。

// Fake index for solr Hashmap fakeIndex; // Add a document 666 to the fakeIndex SolrIndexReader reader = Mockito.mock(SolrIndexReader.class); // Give the reader access to the fake index Mockito.when(reader.document(666)).thenReturn(document(fakeIndex(666))

我不能使用任意的参数,因为我正在testing查询的结果(即他们返回的文档)。 同样,我不想为每个文档指定一个特定的值,并且有一行!

Mockito.when(reader.document(0)).thenReturn(document(fakeIndex(0)) Mockito.when(reader.document(1)).thenReturn(document(fakeIndex(1)) .... Mockito.when(reader.document(n)).thenReturn(document(fakeIndex(n))

我查看了使用Mockito页面上的callback部分。 不幸的是,这不是Java,我无法得到我自己的解释,在Java中工作。

编辑(澄清):我如何得到Mockito捕获参数X并将其传递到我的函数? 我想要X的确切值(或参考)传递给函数。

我不想枚举所有的情况,任意的参数将不起作用,因为我正在testing不同的查询结果。

Mockito页面说

val mockedList = mock[List[String]] mockedList.get(anyInt) answers { i => "The parameter is " + i.toString }

这不是Java,我不知道如何翻译成Java或传递到一个函数。

我从来没有使用Mockito,但想学习,所以在这里。 如果有人比我更无能为力,请先回答他们的问题!

Mockito.when(reader.document(anyInt())).thenAnswer(new Answer() { public Object answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); Object mock = invocation.getMock(); return document(fakeIndex((int)(Integer)args[0])); } });

检查ArgumentCaptors:

ArgumentCaptor argument = ArgumentCaptor.forClass(Integer.class); Mockito.when(reader.document(argument.capture())).thenAnswer( new Answer() { Object answer(InvocationOnMock invocation) { return document(argument.getValue()); } });

您可能希望将verify()与ArgumentCaptor结合使用以确保在testing中执行,并使用ArgumentCaptor来评估参数:

ArgumentCaptor argument = ArgumentCaptor.forClass(Document.class); verify(reader).document(argument.capture()); assertEquals(*expected value here*, argument.getValue());

参数的值显然可以通过argument.getValue()进行进一步的操作/检查或任何你想做的事情。

对于Java 8,这可能是这样的:

Mockito.when(reader.document(anyInt())).thenAnswer( (InvocationOnMock invocation) -> document(invocation.getArguments()[0]));

我假设document是一张地图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值