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)
Welcome to Intellipaat Community. Get your technical queries answered by top developers!

30.5k questions

32.5k answers

500 comments

108k users

Browse Categories

...