如何使用Mockito使mock变为void方法

如何用void返回类型模拟方法?

我实现了一个观察者模式,但我不能用Mockito模仿它,因为我不知道如何.

我试图在互联网上找到一个例子,但没有成功.

我的班级看起来像这样:

public class World {

    List<Listener> listeners;

    void addListener(Listener item) {
        listeners.add(item);
    }

    void doAction(Action goal,Object obj) {
        setState("i received");
        goal.doAction(obj);
        setState("i finished");
    }

    private string state;
    //setter getter state
} 

public class WorldTest implements Listener {

    @Test public void word{
    World  w= mock(World.class);
    w.addListener(this);
    ...
    ...

    }
}

interface Listener {
    void doAction();
}

系统不会通过模拟触发. =(
我想显示上面提到的系统状态.并根据他们做出断言.

解决方法:

看一下Mockito API docs.正如链接文档所提到的(第12点),您可以使用Mockito框架中的任何doThrow(),doAnswer(),doNothing(),doReturn()方法系列来模拟void方法.

例如,

Mockito.doThrow(new Exception()).when(instance).methodName();

或者如果你想将它与后续行为相结合,

Mockito.doThrow(new Exception()).doNothing().when(instance).methodName();

假设您正在考虑在下面的类World中模拟setter setState(String s),代码使用doAnswer方法来模拟setState.

World  mockWorld = mock(World.class); 
doAnswer(new Answer<Void>() {
    public Void answer(InvocationOnMock invocation) {
      Object[] args = invocation.getArguments();
      System.out.println("called with arguments: " + Arrays.toString(args));
      return null;
    }
}).when(mockWorld).setState(anyString());
上一篇:java – 使mocked方法返回传递给它的参数


下一篇:spring – jUnit:找不到接口com.querydsl.core.types.Predicate的主要或默认构造函数