Stubbing void methods to do nothing

This post explains how to change the implementation of void methods to do nothing for testing purposes.

Below is the example

Classes to be tested


package package13;

public class Class2 {
    public void method2(String value) {
        value = value + " World";
    }
}

package package13;

public class Class1 {
    private Class2 class2;
    
    public String method1(String value) {
        class2.method2(value);
        return value;
    }
}

Test Class


1  package package13;
2  
3  import static org.junit.Assert.assertEquals;
4  import static org.mockito.Matchers.*;
5  
6  import org.junit.Test;
7  import org.junit.runner.RunWith;
8  import org.mockito.InjectMocks;
9  import org.mockito.Mock;
10 import org.mockito.Mockito;
11 import org.mockito.runners.MockitoJUnitRunner;
12 
13 @RunWith(MockitoJUnitRunner.class)
14 public class Class1Test {
15  @InjectMocks
16  private Class1 class1;
17  
18  @Mock
19  private Class2 class2;
20  
21  @Test
22  public void testMethod1() {
23      String value = class1.method1("Hello");
24      Mockito.doNothing().when(class2).method2(anyString());
25      assertEquals("Hello", value);
26  }
27 }

Explanation

We want to test Class1's method1. Class1's method1 calls Class2's method2. While testing we want to the Class2's method2 to do nothing.

This can be achieved by creating a test stub of Class2 and make the method do nothing using the below code. Refer to line 24 in the Test Class.
Mockito.doNothing().when(class2).method2(anyString());

In the code snippet, we are telling Mockito that when Class2's method2 is called with any string do nothing.

When the test class is ran, the return value of Class1's method1 will be "Hello" instead of "Hello World".

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s