JsonPathResultMatchers не может успешно проверить ответ - PullRequest
0 голосов
/ 27 августа 2018

Почему JsonPathResultMatchers не может успешно проверить ответ? Тест

private static final UUID TRANSACTION_UUID_ONE = UUID.fromString("336ca9de-1583-4f39-9c67-f8380323d09d");

restBalanceMockMvc.perform(put("/api/balance")
        .contentType(TestUtil.APPLICATION_JSON_UTF8)
        .content(TestUtil.convertObjectToJsonBytes(transaction)))
        .andExpect(status().isOk())
        .andExpect(jsonPath("$.transactionId").value(hasItem(TRANSACTION_UUID_ONE.toString())))
        .andExpect(jsonPath("$.errorCode").value(hasItem("")))
        .andExpect(jsonPath("$.balanceVersion").value(hasItem(UPDATED_BALANCE_VERSION)))
        .andExpect(jsonPath("$.balanceChange").value(hasItem(BALANCE_CHANGE)))
        .andExpect(jsonPath("$.balanceAfterChange").value(hasItem(BALANCE_AFTER_CHANGE)));

Ответ:

{"username":"player1","transactionId":"336ca9de-1583-4f39-9c67-f8380323d09d","balanceChange":2,"errorCode":"","balanceVersion":1,"balanceAfterChange":5.00}

Ошибка

java.lang.AssertionError: JSON path "$.transactionId"
Expected: a collection containing "336ca9de-1583-4f39-9c67-f8380323d09d"
     but: was "336ca9de-1583-4f39-9c67-f8380323d09d"
Expected :a collection containing "336ca9de-1583-4f39-9c67-f8380323d09d"

Actual   :"336ca9de-1583-4f39-9c67-f8380323d09d"

1 Ответ

0 голосов
/ 27 августа 2018

JsonPathResultMatchers.value () ожидает Hamcrest Matcher для оценки значения.

hasItem () определяется следующим образом:

Создает средство сопоставления для Iterables, которое совпадает только тогда, когда один проход по проверенному Iterables дает хотя бы один элемент, равный указанному item.

transactionId в вашем JSON - это обычная строка, а не коллекция, поэтому hasItem() здесь нельзя использовать.

Попробуйте с

jsonPath("$.transactionId").value(equalTo(TRANSACTION_UUID_ONE.toString()))

или просто

jsonPath("$.transactionId").value(TRANSACTION_UUID_ONE.toString())
...