У меня есть метод тестирования, который предоставляется,
@Test
public void calculateReward() throws Exception {
when(userService.findById(any(Long.class))).thenReturn(Optional.of(user));
int steps = 1000;
user.setCurrentSteps(steps);
user.setTotalSteps(steps);
when(userService.save(any(User.class))).thenReturn(user);
Map<String, Double> map = new HashMap<>();
map.put("EUR", 1.0);
when(currencyUtilities.getCurrencyMap()).thenReturn(map);
mockMvc.perform(put("/api/v1/users/calculateReward")
.param("userId", String.valueOf(user.getId())))
.andExpect(
status().isCreated()
).andExpect(
content().contentType(MediaType.APPLICATION_JSON_UTF8)
).andDo(print())
.andExpect(
jsonPath("$.name", is(user.getName()))
).andExpect(
jsonPath("$.currency", is(user.getCurrencyName()))
).andExpect(
jsonPath("$.reward", is(1.0)));
}
Я получаю сообщение об ошибке,
java.lang.AssertionError: JSON path "$.reward"
Expected: is <1.0>
but: was "1.00"
Expected :is <1.0>
Actual :"1.00"
В чем проблема?




Как и говорится в сообщении об ошибке: тест ожидает увидеть число 1.0 в полученном JSON (is(1.0)), но на самом деле JSON содержит строку "1.00" по этому пути. Прочтите https://github.com/json-path/JsonPath для значения путей, но $.reward — это просто "reward" поле корневого объекта. Так должно выглядеть
{
"reward": 1.0,
... other fields including "name" and "currency"
}
но был
{
"reward": "1.00",
...
}
is("1.00"). Но сначала нужно разобраться, тест или тестируемую систему надо исправлять! Тем более, что вы говорите, что тест "обеспечен".
Как мне это исправить? Извините, если тупо, но я не умею. Изменение ti на
jsonPath("$.reward", is(1.00)));не решает мою проблему.