首页 > 解决方案 > restMockMvc - 预期:一个包含 <1.0F> 的集合,但:是 <1.0>

问题描述

在休息端点上运行测试时遇到问题:

java.lang.AssertionError: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 结果以匹配 Float 或测试与当前输出匹配?

谢谢你的帮助

标签: javaspringspring-bootjunit5

解决方案


好的,我终于找到了如何处理这个问题。

在测试之前,我将默认的 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())));

我使用了 double 值,因为预期值为 1.0F,而 json 结果为 1.0。


推荐阅读