0

使用@AutoConfigureMockMvc时如何指定消息转换器?

考虑以下示例:

@SpringBootTest(classes = SomeController.class)
@AutoConfigureMockMvc
@WithMockUser
class SomeControllerTestIT {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private SomeController controller;

    @Test
    void foo() throws Exception {

        MockMvc customMvc = standaloneSetup(resource).setMessageConverters(new MappingJackson2HttpMessageConverter()).build();

       
        customMvc.perform(get("/some-path"))
            .andExpect(status().isOk())
            .andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE));
    }
}

如果我使用普通的mockMvc而不是customMvc则会出现以下异常,因为MappingJackson2HttpMessageConverter未注册:

Type = org.springframework.http.converter.HttpMessageNotWritableException

如果我使用customMvc,那么测试是绿色的。所以我需要以某种方式将 MappingJackson2HttpMessageConverter 应用于mockMvc 我不知道如何。

请指教

4

1 回答 1

1

基于https://github.com/spring-projects/spring-boot/issues/24000正确的解决方案是同时使用 @AutoConfigureMockMvc 和 @AutoConfigureWebMvc

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@AutoConfigureWebMvc
@AutoConfigureMockMvc
@WithMockUser
public @interface MockMvcWithUser {
}

@SpringBootTest(classes = SomeController.class)
@MockMvcWithUser 
class SomeControllerTestIT { 
  ... // same test logic goes here
}
于 2020-11-02T21:34:42.383 回答