当前位置: 首页 > 面试题库 >

模拟回调和获取参数值

融泓
2023-03-14
问题内容

我没有运气让Mockito捕获函数参数值!我在模拟搜索引擎索引,而不是建立索引,而是使用哈希。

// 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))

我不能使用任意参数,因为我正在测试查询的结果(即查询返回的文档)。同样,我也不想为每个文档指定特定的值,也不要为每行指定一行!

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”页面上的“回调”部分。不幸的是,它不是Java,我无法对此做出自己的解释才能在Java中工作。

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

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

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]));
     }
 });


 类似资料:
  • 出于学校目的,我正在创建一个使用股票API的应用程序。 我正在尝试为一种获取过去10年所有股票数据的方法编写一个测试。我不想实际获取所有这些数据,而是想抛出一个异常。 我想测试的方法: 股票时间系列(....)调用可以抛出阿尔法仓位异常。 我这样嘲弄了TimeSeries类: 在我的测试类中,我想模拟这个调用,并返回一个异常而不是实际数据。 无论我多么试图嘲笑这段代码,它永远不会抛出异常。它将始终

  • 我正在尝试测试另一个方法使用的getCookieByName方法。但是,我不确定我是否正确执行了此操作,因为该方法似乎被多次调用,并且它在第一次尝试时设置了值,但在最后一次调用时为空。我认为模拟调用的顺序可能是错误的,或者其中一些可能不需要,但是如果我删除了其中任何一个,我仍然会得到其他错误,因此不确定我到底做错了什么。 这是我的测试和模拟调用,以及在同一个方法中两次调用getCookieByNa

  • 我正在使用Junit4测试外部java类。我想模拟下面的代码行 我试过这样 但我仍然收到了这个错误“java.lang.ExceptionInInitializeError” Java语言lang.ExceptionInInitializerRor在sun。反映GeneratedSerializationConstructorAccessor6。java上的newInstance(未知源)。lan

  • 参数回调方式与调用本地 callback 或 listener 相同,只需要在 Spring 的配置文件中声明哪个参数是 callback 类型即可。Dubbo 将基于长连接生成反向代理,这样就可以从服务器端调用客户端逻辑 1。可以参考 dubbo 项目中的示例代码。 服务接口示例 CallbackService.java package com.callback; public interfa

  • 我在用Mock编写单元测试时遇到了一个问题。有一个对象,我需要模拟有很多getter,我在代码中调用它们。但是,这些不是我的单元测试的目的。所以,有没有一种方法我可以模拟所有的方法,而不是一个一个地模拟它们。 下面是代码示例: 那么,有没有一种方法可以避免为无用的“field1”到“field20”写所有的“when”