파일 업로드 (단위 테스트 코드작성)

파일업로드 아닌 이전에 작성했던 테스트 코드를 한번 살펴보자

@SpringBootTest
public class DemoApplicationTests {

    private MockMvc mvc;

    @Before
    public void setUp() {
        mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
    }

    @Test
    public void getHello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpect(content().string(equalTo("Hello World")));
    }

}

실체 구현한 file upload 테스트 코드

@SpringBootTest(classes = FileUploadDemoApplication.class)
public class FileTest {

    @Autowired
    protected WebApplicationContext context;
    protected MockMvc mvc;

    @BeforeEach
    public void setUp() {
        mvc = MockMvcBuilders.webAppContextSetup(context).build();
    }

    @Test
    public void uploadFile() throws Exception {
        MockMultipartFile file = new MockMultipartFile(
                "file",
                "hello.txt",
                MediaType.TEXT_PLAIN_VALUE,
                "Hello, World!".getBytes()
        );

        final MvcResult result = mvc.perform(
                MockMvcRequestBuilders
                        .multipart("/upload")
                        .file(file))
                .andDo(print())
                .andExpect(status().isOk())
                .andReturn();
    }

}

여기서 핵심은 MockMvc tool 사용이다. 희망하는 http 전송 후 리턴 결과를 지정한다. 사실 upload 파일도 http 통신을 진행한다. 때문에 MockMvc 를 사용하는건 변함없다. 단지 upload 라는 data가 바뀌였을뿐이다. 동일하게 받고 싶은 데이터 (파일 유형을 ) 직접 지정할수 있다.

끝!

Last updated