Testing Void Method Using Mockito

Posted by coffeetechgaff on April 10, 2017

Mockito is industry wide mocking framework for unit test. It gives an ability to a developer to write his/her code without depending on other developer’s code. Testing void method is hard because it doesn’t return any value. In this blog, I will show, how we can test our void method using Mockito.

Purpose

Unit testing void method of a class.

Dependency

                      
                      
                          org.mockito
                          mockito-all
                          1.10.19
                      
                    

Implementation

Class to hold void method:

                      package com.vsubedi.voidTest;

                      import org.slf4j.Logger;
                      import org.slf4j.LoggerFactory;

                      public class SomeVoidMethod {
                          private static final Logger logger = LoggerFactory.getLogger(SomeVoidMethod.class);

                          public void printLogs(){
                              logger.info("This method has been executed");
                          }
                      }
                    

Testing above class’s void method:

                      package com.vsubedi.voidTest;

                      import static org.mockito.Mockito.verify;

                      import org.junit.AfterClass;
                      import org.junit.Before;
                      import org.junit.BeforeClass;
                      import org.junit.Test;
                      import org.mockito.InjectMocks;
                      import org.mockito.MockitoAnnotations;
                      import org.mockito.Spy;
                      import org.slf4j.Logger;
                      import org.slf4j.LoggerFactory;

                      public class TestVoidMethod {
                          private static final Logger logger = LoggerFactory.getLogger(TestVoidMethod.class);

                          @InjectMocks
                          @Spy
                          private SomeVoidMethod someVoidMethod;

                          @BeforeClass
                          public static void setUpBeforeClass() throws Exception {
                              logger.info("============ START UNIT TEST ==============");
                          }

                          @AfterClass
                          public static void tearDownAfterClass() throws Exception {
                              logger.info("============ END UNIT TEST ==============");
                          }

                          @Before
                          public void setUp() throws Exception {
                              MockitoAnnotations.initMocks(this);
                          }

                          @Test
                          public void testPrintLogs() {
                              someVoidMethod.printLogs();

                              //verifying the interaction to the method
                              verify(someVoidMethod).printLogs();
                          }
                      }
                      

We need to have @Spy annotation to run verify() method which is supplied by Mockito. verify tells that printLogs() of SomeVoidMethod class has been executed at least once.

This is just a very simple example to show how we can test void method. Void methods can be complex. We can also test those complex void methods using Mockito.