9

After upgrading my rest service from Spring Boot 1.5.10 to 2.0.0 I encountered my tests failing which passed before.

Following Scenario:

import org.mockito.internal.matchers.Null;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;

...

.andExpect(jsonPath("img").value(Null.NULL))

Fails now in Spring MVC 5 with following message:

java.lang.AssertionError: JSON path "img"
Expected :isNull() Actual :null

What is the correct way in Spring MVC 5 to assert that the value of the jsonPath is null?

mrkernelpanic
  • 4,268
  • 4
  • 28
  • 52

3 Answers3

25

Answering my own question as I found the solution by myself.

You have to use the correct Matcher, in my case org.hamcrest.core.IsNull

So I had to change to

import org.hamcrest.core.IsNull;
...
andExpect(jsonPath("img").value(IsNull.nullValue()))
mrkernelpanic
  • 4,268
  • 4
  • 28
  • 52
4

April 2022, Hamcrest 2.2

nullValue() is a standalone static method importable by org.hamcrest.CoreMatchers.nullValue.

So, updated solution resolves to

static import org.hamcrest.core.nullValue;
...
andExpect(jsonPath("img").value(nullValue()))
4javier
  • 481
  • 2
  • 7
  • 22
1

You can use content().srtring(Matcher matcher) and then use IsEmptyString matcher

result.andDo(print())
      .andExpect(status().isNoContent())
      .andExpect(content().string(IsEmptyString.isEmptyOrNullString()));
barrenaedu
  • 19
  • 2
  • It's not the same. Your solution will verify that response doesn't have **any content at all**, but the required solution, which was provided by @mrkernelpanic himself, should verify that **only one field** from the response Json object is NULL. It's two definitely different checks. – provisota Mar 31 '22 at 10:23
  • `isEmptyOrNullString()` was deprecated you should use `emptyOrNullString()` – Falcon May 09 '23 at 07:37