Over a million developers have joined DZone.

Stubbing With Mockito ArgumentCaptor [Snippets]

DZone's Guide to

Stubbing With Mockito ArgumentCaptor [Snippets]

Using methods that need collaborators? See how Mockito's ArgumentCaptor can lend a hand to make your testing and verification simpler.

· Java Zone ·
Free Resource

Bring content to any platform with the open-source BloomReach CMS. Try for free.

Consider a scenario where we are testing a method that depends on a collaborator. This collaborator takes an argument while calling one of its methods. 

Now, there can be two scenarios.

First, the argument is passed externally to the method we are testing and then used by the collaborator during its own method call

method(argument arg)

To test this method, we mock the collaborator and then call the method as follows:


So here, in the test method, we have the arg1 instance and, hence, can be verified.

Second, the argument being used by the collaborator to make its own method call is not passed externally, but is instead created inside the method being tested:


To test this method, we mock the collaborator and then call the method as follows:


But how do we verify the collaborator was called with which arguments, since we don't have access to the argument, as it was created internally inside the method? This where the Mockito ArgumentCaptor comes into the picture.

Using the ArgumentCaptor, we can get the argument instance created internally and used in the collaborator call and, thus, we can verify it.

Argument actual = captor.getValue();

BloomReach CMS: the API-first CMS of the future. Open-source & enterprise-grade. - As a Java developer, you will feel at home using Maven builds and your favorite IDE (e.g. Eclipse or IntelliJ) and continuous integration server (e.g. Jenkins). Manage your Java objects using Spring Framework, write your templates in JSP or Freemarker. Try for free.

java ,mockito ,collaborator ,argumentcaptor

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}