gpt4 book ai didi

java - 如何用java中的新函数替换模拟函数

转载 作者:搜寻专家 更新时间:2023-11-01 03:16:46 28 4
gpt4 key购买 nike

我正在用 Mockito 编写 UT,我想替换我的模拟函数(哪个数据库选择操作)

class DataBaseSelect {
List<Long> selectDataFromDB(Long key){
List<Long> result = db.select(key);
return result;
}
}

我在测试类中编写了新功能(使用 map 模拟数据库选择);

class MapSelect {
List<Long> selectDataFromMap(Long key){
List<Long> result = map.get(key);
return result;
}
}

我想用右键输入返回正确的值

我尝试使用如下所示的 ArgumentCaptor 来执行此操作,但它没有按我想要的方式工作

ArgumentCaptor<Long> argumentCaptor = ArgumentCaptor.forClass(Long.class);
Mockito.when(dataBaseSelect.selectDataFromDB(argumentCaptor.capture())).thenReturn(MapSelect.selectDataFromMap(argumentCaptor.getValue()));
//some thing else here ,

我想在调用 dataBaseSelect.selectDataFromDB 时,它将被模拟,然后从 MapSelect.selectDataFromMap 返回结果,参数从 dataBaseSelect.selectDataFromDB 传递

最佳答案

如果您需要替换您自己的方法实现,您可以这样做:

// create method substitution
Answer<List<Long>> answer = invocation -> mapSelect.selectDataFromMap((Long) invocation.getArguments()[0]);

// Mock method
Mockito.doAnswer(answer).when(dataBaseSelect).selectDataFromDB(anyLong());

您的解决方案不正确,因为捕获器用于方法调用验证(方法被调用了多少次),示例:

// method calling: mockedObject.someMethod(new Person("John"));
//...
ArgumentCaptor<Person> capture = ArgumentCaptor.forClass(Person.class);
verify(mockedObject).someMethod(capture.capture());
Person expected = new Person("John");
assertEquals("John", capture.getValue().getName());

在这个例子中,期望'someMethod'被调用一次并返回人“John”

关于java - 如何用java中的新函数替换模拟函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47548390/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com