使用Mockito使用void方法对类进行部分模拟

时间:2017-07-28 18:30:23

标签: java android junit mocking mockito

我有以下课程:

public class A extends B {

    public A(T t) {
        this.t = t;
    }   

    public void reg(Manager manager) {
        //some operations
    }    

    public void unreg(Manager manager) {
        manager.function1(this);   
    }   

    @Override   
    public void getData(Context context, final Intent intent) {
        t.function1();
        t.function2();
    }    

    T t;
}

现在,在这个类中我想模拟getData方法而不是其他2个方法。因此,每当使用context和intent调用getData时,我想执行我的自定义方法。但是对于reg和unreg,我想调用原始函数。请注意,所有返回数据类型都为void。

我是Mockito和java的新手。我写了以下代码:

    A mockA = Mockito.mock(A.class);
Manager mockMan = Mockito.mock(Manager.class);          
doCallRealMethod().when(mockA).register(eq(mockMan));
doCallRealMethod().when(mockA).unregister(eq(mockMan));
doAnswer(new Answer<Void>() {
    @Override
    public Void answer(InvocationOnMock invocation) throws Throwable {
        Context getContextArg = (Context) invocation.getArguments()[0];
        Intent getIntentArg = (Intent) invocation.getArguments()[1];
        //mockgetData will be the function I want to call instead
        mockgetData(getContextArg,getIntentArg);
    }

}).when(mockA).getData(eq(getContext()),eq(new Intent()));

我面临的问题是,要模拟getData,我必须在构造函数设置的对象t上调用一些函数。当实例化A类时,如何在调用原始构造函数时使用T对象的值。 我不确定我是否正确使用了doAnswer。任何帮助将不胜感激。

0 个答案:

没有答案