如何使用内容类型application / x-www-form-urlencoded中的自定义对象测试Post请求?

时间:2017-10-27 12:55:30

标签: spring-boot mockmvc spring-test-mvc

我有控制器:

    @PostMapping(value = "/value/", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
    public String updateSettings(final Dto dto) {
        System.out.println(">>> " + dto);
        return "template";
    }

如果我通过chrome窗口发送请求,控制器就可以工作。但是当我为这种方法编写测试时,我遇到了问题。未转换对象,未插入值。

测试:

@Test
    @WithMockUser(username = FAKE_VALID_USER, password = FAKE_VALID_PASSWORD)
    public void test_B_CreateDtoWithValidForm() throws Exception {

        final Dto dto = new Dto();
               dto.setId("value");
               dto.setEnabled("true");

        this.mockMvc.perform(post(URL_SET_PROVIDER_SETTINGS)
                .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE)
                .content(dto.toString()))
                    .andDo(print());
  }
  

输出是>>> Dto {id = null,enabled = false}

如何在内容类型application / x-www-form-urlencoded中使用自定义对象测试Post请求?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您不需要使用content,而是需要以这种方式使用param

this.mockMvc.perform(post(URL_SET_PROVIDER_SETTINGS)
            .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE)
            .param("id", "value")
            .param("enabled", "true"))
            .andDo(print());