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?

3
  • Are you using jayway lib for jsonpath? Can you please show the name package name for jsonpath ? Commented Mar 14, 2018 at 14:12
  • I am using org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; Commented Mar 14, 2018 at 14:16
  • alternate way is to use new JsonPathExpectationsHelper("$.img").assertValueIsEmpty(jsonContent); Commented Mar 14, 2018 at 14:52

3 Answers 3

28

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()))
Sign up to request clarification or add additional context in comments.

Comments

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()))

Comments

1

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

result.andDo(print())
      .andExpect(status().isNoContent())
      .andExpect(content().string(IsEmptyString.isEmptyOrNullString()));

2 Comments

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.
isEmptyOrNullString() was deprecated you should use emptyOrNullString()

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.