I have an interface with a method that expects an array of Foo
:
public interface IBar {
void doStuff(Foo[] arr);
}
I am mocking this interface using Mockito, and I'd like to assert that doStuff()
is called, but I don't want to validate what argument are passed - "don't care".
How do I write the following code using any()
, the generic method, instead of anyObject()
?
IBar bar = mock(IBar.class);
...
verify(bar).doStuff((Foo[]) anyObject());
This question is related to
java
unit-testing
mocking
mockito
You can use Mockito.isA()
for that:
import static org.mockito.Matchers.isA;
import static org.mockito.Mockito.verify;
verify(bar).doStuff(isA(Foo[].class));
http://site.mockito.org/mockito/docs/current/org/mockito/Matchers.html#isA(java.lang.Class)
This should work
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.verify;
verify(bar).DoStuff(any(Foo[].class));
As I needed to use this feature for my latest project (at one point we updated from 1.10.19), just to keep the users (that are already using the mockito-core version 2.1.0 or greater) up to date, the static methods from the above answers should be taken from ArgumentMatchers
class:
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.ArgumentMatchers.any;
Please keep this in mind if you are planning to keep your Mockito artefacts up to date as possibly starting from version 3, this class may no longer exist:
As per 2.1.0 and above, Javadoc of org.mockito.Matchers states:
Use
org.mockito.ArgumentMatchers
. This class is now deprecated in order to avoid a name clash with Hamcrest *org.hamcrest.Matchers
class. This class will likely be removed in version 3.0.
I have written a little article on mockito wildcards if you're up for further reading.
Source: Stackoverflow.com