728x90

Spring Test MockMvc의 한글 깨짐 처리

스프링에서 테스트 코드를 작성할 때 MockMvc를 흔히 사용한다.

대략 아래와 같이 설정하고 사용한다.

변경일자 2022-04-19 수정
MockMvc를 보통 테스트코드를 작성할 때 사용할텐데,

@WebMvcTest를 사용해서 mvc를 위한 테스트를 만들 수 있다.

//@SpringBootTest  
@WebMvcTest(ApiController.class)  
public class ApiControllerTest {  

    private MockMvc mockMvc;  

    @Autowired  
    private WebApplicationContext ctx;  

    @BeforeEach  
    public void setup() {  
        this.mockMvc = MockMvcBuilders.webAppContextSetup(ctx)  
                .alwaysDo(print())  
                .build();  
    }  

    @Test  
    public void aaa() throws Exception {  
        String keyword = "sports";  

        MvcResult result = this.mockMvc  
                .perform(  
                        get("/api/search/" + keyword)  
                )  
                .andExpect(status().isOk());  
    }  
}  

위의 테스트 코드에서는 한글이 없으므로 아무 문제가 없는데, 아래와 같이 한글을 사용하면 깨진 한글이 Controller에 유입될 수 있으며, 결국 원하는 대로 동작하지 않게 된다.

    @Test  
    public void aaa() throws Exception {  
        String keyword = "스포츠";  // 한글 사용  

        MvcResult result = this.mockMvc  
                .perform(get("/api/search/" + keyword))  
                .andExpect(status().isOk());  
    }  

이 문제는 `MockMvc`를 설정할 때 `CharacterEncodingFilter`를 추가해주면 쉽게 해결할 수 있다.

    @Before  
    public void setup() {  
        this.mockMvc = MockMvcBuilders.webAppContextSetup(wac)  
                .addFilters(new CharacterEncodingFilter("UTF-8", true))  // 필터 추가  
                .alwaysDo(print())  
                .build();  
    }  
728x90

'Spring' 카테고리의 다른 글

Spring -> Spring Boot 마이그레이션  (0) 2022.08.05
[Spring] MockMvc Bean 주입 에러  (0) 2022.08.04
[Spring] Spring Security  (0) 2022.08.03
의존성 주입 어노테이션 정리  (0) 2022.08.03

+ Recent posts