Avinash Jadhav
Avinash Jadhav

Reputation: 1393

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?

Upvotes: 113

Views: 195651

Answers (5)

Montana Harkin
Montana Harkin

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

Kwabena Berko
Kwabena Berko

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

Amadeu Cavalcante Filho
Amadeu Cavalcante Filho

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

ankit
ankit

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

Tunaki
Tunaki

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

Related Questions