Java Mockito-在传递特定参数列表时触发mocked方法
考虑以下问题:Java Mockito-在传递特定参数列表时触发mocked方法,java,unit-testing,mockito,Java,Unit Testing,Mockito,考虑以下问题: class InformationProvider{ private FileAccessor; //custom interface, works like readable DAO, but on files. public List<Information> getInformation (Collection<String> identifiers){ List<Information> infoList =
class InformationProvider{
private FileAccessor; //custom interface, works like readable DAO, but on files.
public List<Information> getInformation (Collection<String> identifiers){
List<Information> infoList = getInformationFromMemory(identifiers);
List<String> remaining = getListofIdsNotInMemory(identifiers, infoList); //looks up which IDs need to be searched in files.
infoList.addAll(fileAccessor.getInformation(remaining));
return infoList;
}
}
类信息提供者{
private FileAccessor;//自定义接口,与可读的DAO类似,但用于文件。
公共列表获取信息(集合标识符){
List infoList=getInformationFromMemory(标识符);
List remaining=GetListofidNotInMemory(标识符,信息列表);//查找需要在文件中搜索的ID。
infoList.addAll(fileAccessor.getInformation(剩余));
返回信息列表;
}
}
我正在为提供者编写一个单元测试。我的想法如下:
class InformationProviderTest{
InformationProvider infoprovider = new InformationProvider();
List<String> idsMemory = Arrays.asList("AAA", "BBB");
List<String> idsFile = Arrays.asList("CCC", "DDD");
@Mock
FileAccessor fa;
@Before
public void setUp(){
//All the necessary mock initialization and constructors and stuff
infoprovider.setFileAccessor(fa);
}
@Test
public void correctDataAllocationTest(){
List<Information> requiredResult = buildInformation("AAA","BBB","CCC","DDD"); //Prepares Information objects for IDs "AAA","BBB","CCC" and "DDD"
List<Information> infoFromFile = buildInformation("CCC","DDD");
Mockito.when(fa.getInformation(idsFile)).thenReturn(infoFromFile);
infoProvider.getInformation(Arrays.asList("AAA","BBB","CCC","DDD"));
//Asserts and stuff
}
类信息提供者测试{
InformationProvider infoprovider=新的InformationProvider();
List idsMemory=Arrays.asList(“AAA”、“BBB”);
List idsFile=Arrays.asList(“CCC”、“DDD”);
@嘲弄
文件存取器fa;
@以前
公共作废设置(){
//所有必要的模拟初始化和构造函数等
infoprovider.setFileAccessor(fa);
}
@试验
public void correctDataAllocationTest(){
List requiredResult=buildInformation(“AAA”、“BBB”、“CCC”、“DDD”);//为ID“AAA”、“BBB”、“CCC”和“DDD”准备信息对象
List infoFromFile=buildInformation(“CCC”、“DDD”);
Mockito.when(fa.getInformation(idsFile)).thenReturn(infoFromFile);
infoProvider.getInformation(Arrays.asList(“AAA”、“BBB”、“CCC”、“DDD”);
//资产及其他
}
在我的例子中,ListidsFile
永远不会调用方法fa.getInformation
,因为用作参数的实际列表是在InformationProvider中新建的。虽然两个列表都包含相同的字符串,“CCC”和“DDD”
如何使Mockito与它们匹配?我发现的所有教程都只处理对象或使用了anyList()。使用anyList()实际上会进行匹配,但会丢失有关ID的信息。我需要确保在使用其他ID调用时,此方法不会返回任何内容,类似于(afaik non existing)“anyListContaining()
”
我也仅限于使用Mockito库。我想你要找的是
ArgumentCaptor
-这里有一个关于稍微不同的用例的问题:实际上这可能是一个更好的链接:我想你要找的是ArgumentCaptor
-这里有一个关于稍微不同的用例的问题:实际上这可能是一个更好的链接: