Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

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

Build vs Buy a Data Quality Solution: Which is Best for You? Gain insights on a hybrid approach. Download white paper now!

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)
{
    collaborator.callMethod(arg);
}


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

method(arg1);
Mockito.verify(collaborator).callMethod(arg1);


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:

method()
{
    arg=CreateArgumentInternally();
    collaborator.callMethod(arg);
}


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

method();


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.

method();
Mockito.verify(collaborator).callMethod(captor.capture());
Argument actual = captor.getValue();

Build vs Buy a Data Quality Solution: Which is Best for You? Maintaining high quality data is essential for operational efficiency, meaningful analytics and good long-term customer relationships. But, when dealing with multiple sources of data, data quality becomes complex, so you need to know when you should build a custom data quality tools effort over canned solutions. Download our whitepaper for more insights into a hybrid approach.

Topics:
java ,mockito ,collaborator ,argumentcaptor

Published at DZone with permission of Vijay Maniyar. See the original article here.

Opinions expressed by DZone contributors are their own.

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

{{ parent.tldr }}

{{ parent.urlSource.name }}