Mockito对私有方法的论证

时间:2014-03-30 23:58:54

标签: java junit mockito

这是我的示例服务类:

class Service {

    @Inject
    private TestDao dao;

    public void method() {
        //Other logic
        List<SomeClass> list = new ArrayList<SomeClass>();
        privateMethod(list);
        //Other logic
    }

    private void privateMethod(List<SomeClass> list) {
        dao.save(list);
    }
}

如果我使用Mockito模拟dao,那么如何测试dao.save方法的调用次数?当我尝试验证时,我必须给出列表对象。但我没有看到任何方法来获得该对象。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果您不关心调用方法的列表,则可以使用anyList()匹配器。例如,如果要验证save()方法被称为完全三次:

verify(dao, times(3)).save(anyList())

如果您想进一步断言调用save()列表,请使用ArgumentCaptor

ArgumentCaptor的示例用法:

ArgumentCaptor<List> argument = ArgumentCaptor.forClass(List.class);
verify(dao, times(3)).save(argument.capture());
List secondValue = argument.getAllValues().get(1); // captured value when the method was called the second time

答案 1 :(得分:1)

使用Matchers.anyList()调用验证:

verify(dao).save(Matchers.anyList());