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.
Join the DZone community and get the full member experience.
Join For FreeConsider 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." - Stack Overflow
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();
Published at DZone with permission of Vijay Maniyar. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments