Mockito - Resetting Mock



Mockito provides the capability to a reset a mock so that it can be reused later. Take a look at the following code snippet.

//reset mock
reset(calcService);

Here we've reset mock object. MathApplication makes use of calcService and after reset the mock, using mocked method will fail the test.

Example

Step 1 − Create an interface called CalculatorService to provide mathematical functions

File: CalculatorService.java

public interface CalculatorService { public double add(double input1, double input2); public double subtract(double input1, double input2); public double multiply(double input1, double input2); public double divide(double input1, double input2); }

Step 2 − Create a JAVA class to represent MathApplication

File: MathApplication.java

public class MathApplication { private CalculatorService calcService; public void setCalculatorService(CalculatorService calcService){ this.calcService = calcService; } public double add(double input1, double input2){ return calcService.add(input1, input2); } public double subtract(double input1, double input2){ return calcService.subtract(input1, input2); } public double multiply(double input1, double input2){ return calcService.multiply(input1, input2); } public double divide(double input1, double input2){ return calcService.divide(input1, input2); } }

Step 3 − Test the MathApplication class

Let's test the MathApplication class, by injecting in it a mock of calculatorService. Mock will be created by Mockito.

File: MathApplicationTester.java

package com.tutorialspoint.mock; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.mockito.Mockito.reset; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; // @RunWith attaches a runner with the test class to initialize the test data @RunWith(MockitoJUnitRunner.class) public class MathApplicationTester { private MathApplication mathApplication; private CalculatorService calcService; @Before public void setUp(){ mathApplication = new MathApplication(); calcService = mock(CalculatorService.class); mathApplication.setCalculatorService(calcService); } @Test public void testAddAndSubtract(){ //add the behavior to add numbers when(calcService.add(20.0,10.0)).thenReturn(30.0); //test the add functionality Assert.assertEquals(mathApplication.add(20.0, 10.0),30.0,0); //reset the mock reset(calcService); //test the add functionality after resetting the mock Assert.assertEquals(mathApplication.add(20.0, 10.0),30.0,0); } }

Step 4 − Execute test cases

Create a java class file named TestRunner in C:\> Mockito_WORKSPACE to execute Test case(s).

File: TestRunner.java

import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MathApplicationTester.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }

Step 5 − Verify the Result

Compile the classes using javac compiler as follows −

C:\Mockito_WORKSPACE>javac CalculatorService.java MathApplication.
   java MathApplicationTester.java TestRunner.java

Now run the Test Runner to see the result −

C:\Mockito_WORKSPACE>java TestRunner

Verify the output.

testAddAndSubtract(MathApplicationTester): expected:<0.0> but was:<30.0>
false
Advertisements