2

我有一个类 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() 中调用的第二个公共方法

谢谢

4

1 回答 1

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();
}
于 2013-11-12T10:24:01.113 回答