Junit java.lang.AssertionError: путь JSON "$.reward"

У меня есть метод тестирования, который предоставляется,

@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"

В чем проблема?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
436
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как и говорится в сообщении об ошибке: тест ожидает увидеть число 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",
  ...
}

Как мне это исправить? Извините, если тупо, но я не умею. Изменение ti на jsonPath("$.reward", is(1.00))); не решает мою проблему.

Heisenberg 14.04.2019 18:34
is("1.00"). Но сначала нужно разобраться, тест или тестируемую систему надо исправлять! Тем более, что вы говорите, что тест "обеспечен".
Alexey Romanov 14.04.2019 19:02

Другие вопросы по теме