mockitocallback和获取参数值
我没有任何运气让Mockito捕捉函数参数值! 我嘲笑search引擎索引,而不是build立一个索引,我只是使用散列。
// Fake index for solr Hashmap<Integer,Document> 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:
http://site.mockito.org/mockito/docs/1.10.19/org/mockito/ArgumentCaptor.html
ArgumentCaptor<Integer> 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<Document> 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
是一张地图。