如何使用formData测试方法,没有RequestBody或带有MockMVC的RequestParam

时间:2018-02-27 20:21:13

标签: java rest junit4 spring-restcontroller mockmvc

我在我的休息控制器中有这个方法 (出于几个复杂的原因,我无法使用@RequestBody或@RequestParam,所以我需要这样做):

@PostMapping(value="/crear")
public Resultado<Candidato> crear(Candidato candidato) throws IOException {
    ...Just code...
    return resultado;
}

我试图用MockMVC测试它,但我的“Candidato”在每个属性中总是空的,这是我的测试直到现在:

 @Test
public void crear() throws Exception {

    String nombre = "Candidato Test2";
    candidato.setNombre(nombre);
    gsonBuilder.setDateFormat(EntitiesBuilderTestUtil.DATE_FORMAT);

    when(procesoSeleccionService.findByToken(anyString())).thenReturn(EntitiesBuilderTestUtil.obtenerProcesoSeleccion());
    when(candidatoValidator.validate(any(Candidato.class))).thenReturn(new Notificacion());

    this.mockMvc.perform(post("/api/candidato/crear")
            .content(gsonBuilder.create().toJson(candidato).getBytes())
            .contentType(MediaType.APPLICATION_FORM_URLENCODED))
            .andExpect(status().isOk())
            .andExpect(content().contentType(IntegrationTestUtil.APPLICATION_JSON_UTF8));
}

在我的ajax请求中,我会做下一个:

crearCandidato: function(){             
            let formulario = app.funciones.obtenerFormulario();
            $.ajax({
                url:baseURL+"/api/candidato/crear",
                type:"POST",
                contentType: false,
                processData: false,
                data:formulario,
                dataType:"JSON"
            }).done(function(data){
                ... do something
            }).fail(function(e){
                ... do something
            });
        }

我的obtenerFormulario()函数:

 obtenerFormulario: function(){
            let formdata = new FormData();
            formdata.append("nombre",app.funciones.removerTagsHtml(app.$inpNombre.val()));
            ...more code
            return formdata;
        },

我怎样才能正确测试方法? 谢谢你的帮助:D

- &GT;更新 我已经有其他测试正确运行了,对于“Candidato”,它是正确创建的,但是jackson使用null属性创建它

1 个答案:

答案 0 :(得分:0)

您可以使用POSTman(https://www.getpostman.com/)或SOAPUI(https://www.soapui.org/)来测试REST服务。

但是,我怀疑问题出在您的javascript函数中,您可以使用chrome开发人员工具的调试功能进行验证。