Matchers.any() for null value in Mockito
Suppose I am having this object objectDemo
which calls to the method objectDemoMethod
with 2 parameters String
and null
. Now I want to verify with Mockito that this method was called:
objectDemo.objectDemoMethod("SAMPLE_STRING", null);
I have written this:
Mockito.verify(objectDemo, Mockito.times(1)).objectDemoMethod(Matchers.any(String.class), null);
but it's giving an error:
Invalid use of argument matchers for null value.
Is there any another way to pass null
value?
Solution 1:
The error message you are getting is expected since you are using argument matcher for only one argument and not the other. From Matchers
Javadoc:
If you are using argument matchers, all arguments have to be provided by matchers.
Therefore, the fix is to use a matcher for the second parameter of the method as well. In this case, it would be a matcher matching null
. Depending on the version of Mockito and Java, you can have:
-
Starting with Mockito 2, you can use
ArgumentMatchers.isNull()
. This works with Java 8 and above:verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull());
Note that if you're running with Java 7 or older, you'll need an explicit cast to make this work, because the type inference in those versions of Java does not take into account the types of the method called:
verify(objectDemo, times(1)).objectDemoMethod(any(String.class), (String) isNull());
-
If you're using Mockito 1, you can use the
Matchers.isNull(clazz)
instead:verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull(String.class));
For the Java ≤ 7 or Mockito 1 cases, the examples uses a case where the second parameter was of type String
: it would need to be replaced with the actual type of the method parameter.
Solution 2:
isNull
seems to be deprecated
With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic friendliness to avoid casting, this is not anymore needed in Java 8.
I think you could use nullable
:
public static <T> T nullable(Class<T> clazz)
You could use something like:
verify(objectDemo, times(1)).objectDemoMethod(any(String.class), nullable(String.class));
Solution 3:
Just use:
Mockito.verify(objectDemo, Mockito.times(1)).objectDemoMethod(Matchers.any(String.class), (ClassName) isNull());
Above help me in java 8 version. Hope this will help you.