Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in Java by (900 points)
edited by

How to mock methods with void return type?

I implemented an observer pattern but I can't mock it with Mockito because I don't know how.

And I tried to find an example on the Internet, but didn't succeed.

My class looks like this:
 

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();
}


The system are not triggered with mock. =( I want to show above mentioned system state. And make assertion according to them.
 

1 Answer

0 votes
by (32.3k points)

You can use any of the doThrow(),doAnswer(),doNothing(),doReturn() family of methods from Mockito framework to mock void methods(check out Mockito API docs)

For example,

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

or you may combine it with follow-up behavior,

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

Presuming that you are looking at mocking the setter setState(String s) in the class World below is the code uses doAnswer method to mock the 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());

Related questions

0 votes
1 answer
0 votes
1 answer
0 votes
1 answer
0 votes
1 answer
asked Sep 30, 2019 in Java by Anvi (10.2k points)

Browse Categories

...