Using ArgumentMatchers with Mockito

Mockito is a mock framework which you can use to write simple and clean tests. One of it’s nice features is the ArgumentMatcher. With the ArgumentMatcher you can determine the outcome of your mocked service or repository based on any condition you want.

Imagine we have a CandyService which can get a list of candies which are liked by a specific customer. This service uses the external ChocalateService which specifically checks if the customer likes chocolate.

The CandyServiceTest class looks like this:

In our first test we expect the CandyService to return a list which includes Chocolate. Therefore the mocked ChocolateService should return true. For this test we will let the service return true if the firstname of the customer is “Albert”. Therefore we need to create the ArgumentMatcher. Since the ArgumentMatcher is an interface, we create a private class in our test as shown below:

Finally in our @Before method we setup the mocked ChocolateService to return true if the argument of its method matches to our ‘customersWhoLikesChocolate’ ArgumentMatcher.

Another handy feature of Mockito is the ArgumentCaptor. More information about the ArgumentMatcher can be found in the Mockito API or take a look at the mockito site:

2 thoughts on “Using ArgumentMatchers with Mockito

  1. Pingback: Spocklight: Change Return Value of Mocked or Stubbed Service Based On Argument Value - Grails Info

  2. Pingback: Change return value of mocked or stubbed service based on argument value with Spock | JDriven BlogJDriven Blog

Leave a Reply

Your email address will not be published. Required fields are marked *