Testing Form posts through MockMVC

前端 未结 3 929
悲&欢浪女
悲&欢浪女 2020-12-30 21:11

I\'m writing tests to verify that I can do a generic form post to our API.

I\'ve also added quite some debugging, but I noticed that the data posted by an actual for

3条回答
  •  余生分开走
    2020-12-30 21:54

    If you have Apache HTTPComponents HttpClient on your classpath, you can do it like this:

        mockMvc.perform(post("/some/super/secret/url")
                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                .content(EntityUtils.toString(new UrlEncodedFormEntity(Arrays.asList(
                        new BasicNameValuePair("someparam1", "true"),
                        new BasicNameValuePair("someparam2", "test")
                )))));
    

    If you don't have HttpClient, you can do it with a simple helper method that constructs the urlencoded form entity:

        mockMvc.perform(post("/some/super/secret/url")
                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                .content(buildUrlEncodedFormEntity(
             "someparam1", "value1", 
             "someparam2", "value2"
        ))));
    

    With this helper function:

    private String buildUrlEncodedFormEntity(String... params) {
        if( (params.length % 2) > 0 ) {
           throw new IllegalArgumentException("Need to give an even number of parameters");
        }
        StringBuilder result = new StringBuilder();
        for (int i=0; i 0 ) {
                result.append('&');
            }
            try {
                result.
                append(URLEncoder.encode(params[i], StandardCharsets.UTF_8.name())).
                append('=').
                append(URLEncoder.encode(params[i+1], StandardCharsets.UTF_8.name()));
            }
            catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }
        }
        return result.toString();
     }
    

提交回复
热议问题