使用Jmockit模拟一个公共方法

时间:2013-11-12 09:27:07

标签: java unit-testing junit jmockit jmock

我有一个Handler.java类

它有2个公共方法update(),fetch()

在实际的update()实现中,我调用了公共方法fetch()

fetch()依次调用服务。

所以现在我必须编写一个testUpdate()来模拟公共方法调用,即fetch()

由于它不是静态的,我尝试创建另一个Handler.java实例作为模拟,即

private Handler handler;

@Mocked
private Handler mockedHandler;

现在使用mockedHandler,我在testUpdate()

中设置了以下代码
new NonStrictExpectations(){
mockedHandler.fetch();
returns(response);
};

handler.update();

现在,我希望mockedhandler用于调用fetch()和调用update()的处理程序实例。

但是当我运行实际的方法调用update()时也被嘲笑!!!

i.e. handler.update(); is not at all going to the update().

帮我模拟我在update()

中调用的第二个公共方法

由于

1 个答案:

答案 0 :(得分:6)

听起来你应该嘲笑从Handler#fetch()内部调用的服务类,而不是模仿fetch()方法。

无论如何,模拟类的一些方法而不模仿其他方法称为部分模拟。在JMockit中,您通常会使用NonStrictExpectations(Object...)构造函数,如以下示例测试中所示:

@Test
public void handlerFetchesSomethingOnUpdate()
{
    final Handler handler = new Handler();

    new NonStrictExpectations(handler) {{
        handler.fetch(); result = response;
    }};

    handler.update();
}