Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to mock void methods with Mockito

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 is not triggered with mock.

I want to show the above-mentioned system state. And make assertions according to them.

like image 814
ibrahimyilmaz Avatar asked Feb 16 '10 20:02

ibrahimyilmaz


People also ask

How do you mock a void method?

Mockito provides following methods that can be used to mock void methods. doAnswer() : We can use this to perform some operations when a mocked object method is called that is returning void. doThrow() : We can use doThrow() when we want to stub a void method that throws exception.

How do I verify a void method in Mockito?

Using the verify() MethodMockito provides us with a verify() method that lets us verify whether the mock void method is being called or not. It lets us check the number of methods invocations. So, if the method invocation returns to be zero, we would know that our mock method is not being called.

How do you mock a void in EasyMock?

If we just want to mock void method and don't want to perform any logic, we can simply use expectLastCall(). andVoid() right after calling void method on mocked object. You can checkout complete project and more EasyMock examples from our GitHub Repository.

What assert in void method?

Whenever we write unit test cases for any method we expect a return value from the method and generally use assert for checking if the functions return the value that we expect it to return, but in the case of void methods, they do not return any value.


1 Answers

Take a look at the Mockito API docs. As the linked document mentions (Point # 12) you can use any of the doThrow(),doAnswer(),doNothing(),doReturn() family of methods from Mockito framework to mock void methods.

For example,

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

or if you want to 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()); 
like image 192
sateesh Avatar answered Sep 28 '22 07:09

sateesh