Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon What are the differences between isNull() and notNull() in Mockito


What are the differences between isNull() and notNull() in Mockito


In Mockito, `isNull()` and `notNull()` are two distinct matchers used for verifying the nullability of arguments in method calls. Here's a detailed explanation of each:

`isNull()`

- Purpose: The `isNull()` matcher is used to verify that an argument passed to a method is `null`. It checks whether the input is exactly `null`, meaning it does not match any other value.
- Usage: This matcher is particularly useful when you need to ensure that a method is called with a `null` argument. For example, in a test scenario where you expect a method to handle `null` inputs, you can use `isNull()` to verify this behavior.
- Example:
java
  verify(mockObject).method(isNull(String.class));
  

`notNull()`

- Purpose: The `notNull()` matcher is used to verify that an argument passed to a method is not `null`. It checks whether the input is any non-`null` value, regardless of its type or content.
- Usage: This matcher is useful when you want to ensure that a method is called with a non-`null` argument. It does not care about the specific value as long as it is not `null`.
- Example:
java
  verify(mockObject).method(notNull(String.class));
  

- Alias: `notNull()` has an alias named `isNotNull()`, which serves the same purpose but might be more readable in certain contexts.

Key Differences

- Nullability Check: The primary difference is that `isNull()` checks for `null` values, while `notNull()` checks for non-`null` values.
- Usage Context: `isNull()` is used when you expect a method to be called with a `null` argument, whereas `notNull()` is used when you expect a non-`null` argument.
- Readability and Intent: Both matchers clearly convey their intent, but `notNull()` might be more commonly used to ensure that methods are called with valid, non-`null` arguments, which is often a requirement in robust programming.

In summary, `isNull()` and `notNull()` are complementary matchers in Mockito that help ensure the correct handling of `null` and non-`null` arguments in method calls, each serving a distinct purpose based on the expected behavior of the method under test.

Citations:
[1] https://krossovochkin.com/posts/2021_09_11_mocking_matchers_api/
[2] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.ArgumentMatchers.isNull
[3] https://www.reddit.com/r/SQL/comments/1q614u/difference_between_isnull_and_if_thing_is_null/
[4] https://stackoverflow.com/questions/3925191
[5] https://www.lambdatest.com/automation-testing-advisor/kotlin/methods/org.mockito.kotlin.Matchers.isNull
[6] https://gis.stackexchange.com/questions/203463/what-is-the-difference-between-null-and-is-not-null-in-qgis-filter-expression
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.ArgumentMatchers.notNull
[8] https://stevewall123.wordpress.com/2015/01/08/using-matches-for-null-parameter-with-mockito/
[9] https://stackoverflow.com/questions/4070207/what-is-the-difference-between-is-not-null-and-not-is-null
[10] https://www.reddit.com/r/SQL/comments/tekoum/what_are_pros_and_cons_of_using_nulls_vs_notnulls/
[11] https://stackoverflow.com/questions/3530124/differences-between-is-null-and-isnull-in-mysql/17555439