Reputation: 1393
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?
Upvotes: 113
Views: 195651
Reputation: 419
Ran into this when using Mockito 2.28 and Mockito Kotlin 2.2
any()
and isNull()
weren't matching. However, eq(null)
did finally match, so you might try that if you're in the same boat.
Upvotes: -1
Reputation: 1149
You can make use of Mockito's ArgumentMatchers class, like so:
Mockito.verify(objectDemo).objectDemoMethod(ArgumentMatchers.any(String.class), ArgumentMatchers.isNull());
Upvotes: 0
Reputation: 2388
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));
Upvotes: 47
Reputation: 2845
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.
Upvotes: 2
Reputation: 137104
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.
Upvotes: 149