#java #spring #spring-boot #junit5
#java #весна #весенняя загрузка #junit5
Вопрос:
У меня проблема, когда я запускаю тест на конечной точке rest:
java.lang.Ошибка утверждения: путь в формате JSON «$.[*].montant»
Ожидается: коллекция, содержащая <1.0F>, но: была <1.0>
Ожидаемый: коллекция, содержащая <1.0F> Фактический: <1.0>
код:
restMockMvc.perform(get("/api/{id}", dommage.getId()))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
.andExpect(jsonPath("$.[*].montant").value(hasItem(dommage.getMontant())));
Тест не удался, потому что значение не совпадает, но как я могу отформатировать результат json для сопоставления с плавающим значением или test is с текущим выводом?
Спасибо за вашу помощь
Комментарии:
1. Просто чтобы уточнить, ответ API равен «1.0», и вы ожидаете, что это будет «1.0F»? Я спросил, потому что атрибут — это число, нормально, что ответ 1.0
2. Это правильно, ответ API равен 1.0, но тест ожидает 1.0F, поэтому он не удался.
3. можете ли вы показать возвращаемый тип
getMontant()
метода?4. Я использую аннотацию lombok для средства получения / установки, но свойство: private Float montant
5. Не могли бы вы попробовать что-то вроде этого «new DecimalFormat(«#.##»).format(dommage.getMontant())» в методе «hasItem»
Ответ №1:
Хорошо, я наконец нашел, как справиться с этой проблемой.
Перед тестированием я изменил JsonProvider по умолчанию с JsonSmartJsonProvider (по умолчанию) на JacksonJsonProvider.
Я сделал это с этим фрагментом кода во время инициализации теста:
Configuration.setDefaults(new Configuration.Defaults() {
private final JsonProvider jsonProvider = new JacksonJsonProvider();
private final MappingProvider mappingProvider = new JacksonMappingProvider();
@Override
public JsonProvider jsonProvider() {
return jsonProvider;
}
@Override
public MappingProvider mappingProvider() {
return mappingProvider;
}
@Override
public Set<Option> options() {
return EnumSet.noneOf(Option.class);
}
});
В дополнение к этому я изменил свой тест следующим образом:
.andExpect(jsonPath("$.[*].montant", Float.class).value(hasItem(dommage.getMontant().doubleValue())));
Я использовал двойное значение, потому что ожидаемое значение равно 1.0F, а результат json равен 1.0.