Почему 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"




JsonPathResultMatchers.value () ожидает, что Hamcrest Matcher оценит значение.
hasItem () определяется следующим образом:
Creates a matcher for
Iterablesthat only matches when a single pass over the examinedIterablesyields at least one item that is equal to the specifieditem.
transactionId в вашем JSON - это обычная строка, а не коллекция, поэтому здесь нельзя использовать hasItem().
Попробуйте с
jsonPath("$.transactionId").value(equalTo(TRANSACTION_UUID_ONE.toString()))
или просто
jsonPath("$.transactionId").value(TRANSACTION_UUID_ONE.toString())