Stubbing Method Behavior using Mockito's when() and then() Methods

Mockito Logo

When working with unit tests, we often encounter scenarios where we need to mock certain method behaviors to create effective test cases. Mockito is a popular Java-based mocking framework that provides a powerful way to stub method behavior using its when() and then() methods.

Understanding Mockito's when() Method

Mockito's when() method is used to specify the desired behavior of a mocked method. It allows us to define what should be returned when a particular method is called. This is extremely useful for creating test cases that verify the behavior of certain methods in isolation.

To stub a method using when(), we first need to create a mock object of the class under test. This can be easily done using Mockito's mock() method. For example:

// Create a mock object
SomeClass someClassMock = Mockito.mock(SomeClass.class);

Once the mock object is created, we can use when() to define the behavior of specific methods. For instance, let's assume we have a method calculateSum() in the SomeClass class that returns the sum of two numbers. We can stub this method to always return a specific value by using when():

// Stubbing the calculateSum() method
when(someClassMock.calculateSum(5, 10)).thenReturn(15);

In the above example, we specified that whenever calculateSum(5, 10) is called on someClassMock, it should return 15. This allows us to write test cases that depend on a known result, making them more reliable.

Using Mockito's then() Method for Additional Behavior

After specifying the desired behavior using when(), we can further customize the method behavior by using Mockito's then() method. The then() method provides additional capabilities to control the execution flow and produce different behaviors based on different inputs.

For instance, let's consider a scenario where we want to throw an exception when a method is called with a specific argument. We can achieve this by combining when() and then() methods:

// Throwing an exception for a specific method argument
when(someClassMock.calculateSum(0, any())).thenThrow(new IllegalArgumentException("Invalid argument"));

In this example, we used thenThrow() to define that whenever calculateSum(0, any()) is called, it should throw an IllegalArgumentException. This allows us to handle exceptional scenarios and verify the code's behavior in such cases.

Conclusion

Mockito's when() and then() methods provide a convenient way to stub method behavior in unit tests. By using when() to define the desired behavior and then() to further customize it, we can simulate different scenarios and ensure that our code works correctly in various conditions. This makes unit testing more effective and reliable, leading to better quality software development.


noob to master © copyleft