2016-10-27 4 views
4

У меня возникли проблемы с тестированием и JSon путемВесна тестирования и JsonPath probblem

Я просто пытаюсь выполнить простой тест и проверьте значение ID:

mockMvc.perform(get("/applications/")).andExpect(status().isOk()) 
     .andDo(print()) 
     .andExpect(content().contentType(TestUtils.APPLICATION_JSON_UTF8)) 
     .andExpect(jsonPath("$", hasSize(4))) 
     .andExpect(jsonPath("$.id",is(1))); 

Но я получаю сообщение об ошибке как и следующее. Похоже, мой код должен проверять значение id. Я не достаточно конкретный, так как в возвращенном JSON есть несколько элементов? Любая помощь приветствуется. Благодарю.

 Content type = application/json;charset=UTF-8 
      Body = [{"id":1,"name":"test2"},{"id":2,"name":"test2"}] 
    Forwarded URL = null 
    Redirected URL = null 
      Cookies = [] 

java.lang.AssertionError: No value at JSON path "$.id", exception: Expected to find an object with property ['id'] in path $ but found 'net.minidev.json.JSONArray'. This is not a json object according to the JsonProvider: 'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider'. 
    at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:258) 
    at ... 

ответ

7

Я понял ответ через 5 минут после публикации. Нужно идти глубже в массив. Эта работа:

.andExpect(jsonPath("$.[0].id",is(1))); 
+0

Правильная форма '$. [0]' или '$ [0]'? – Whimusical

+0

@Mike Вы уверены, что это правильно? – Abderrahim

+0

Он не работал для меня https://stackoverflow.com/questions/47818094/json-keys-having-space – paul

2

Ваше выражение JsonPath неверно, потому что ваш ответ в теле - это массив. Согласно JsonPath Specification, это Синтаксисы все правильно:

"$[0][id]" 
"$.[0].[id]" 
"$[0].id" 
"$.0.id" 

Это useful page также может помочь вам узнать выражение jsonpath для ваших тестов.

+0

Он не работал для меня https://stackoverflow.com/questions/47818094/json-keys-having-space – paul

Смежные вопросы