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”);
//资产及其他
}
在我的例子中,List
idsFile
永远不会调用方法
fa.getInformation
,因为用作参数的实际列表是在InformationProvider中新建的。虽然两个列表都包含相同的字符串,“CCC”和“DDD”

如何使Mockito与它们匹配?我发现的所有教程都只处理对象或使用了anyList()。使用anyList()实际上会进行匹配,但会丢失有关ID的信息。我需要确保在使用其他ID调用时,此方法不会返回任何内容,类似于(afaik non existing)“
anyListContaining()


我也仅限于使用Mockito库。

我想你要找的是
ArgumentCaptor
-这里有一个关于稍微不同的用例的问题:实际上这可能是一个更好的链接:我想你要找的是
ArgumentCaptor
-这里有一个关于稍微不同的用例的问题:实际上这可能是一个更好的链接: