-
kotlinDSL + RestDocs 적용하기프로젝트/미디어 스트리밍 서버 프로젝트 2022. 9. 28. 00:01728x90
개요
Controller 단위 테스트 이후에 RestDocs를 통해 문서화를 진행해보려고 합니다.
Build.gradle.kts 설정
plugins{ id("org.asciidoctor.jvm.convert") version "3.3.2" } val asciidoctorExt by configurations.creating dependencies{ // rest-docs testImplementation("org.springframework.restdocs:spring-restdocs-mockmvc") asciidoctorExt("org.springframework.restdocs:spring-restdocs-asciidoctor") } val snippetsDir by extra { file("build/generated-snippets") } tasks { asciidoctor { dependsOn(test) configurations("asciidoctorExt") inputs.dir(snippetsDir) } register<Copy>("copyDocument") { dependsOn(asciidoctor) from(file("build/docs/asciidoc/index.html")) into(file("src/main/resources/static/docs")) } bootJar { dependsOn("copyDocument") } }
1. 기존 컨트롤러 코드에 @AutoConfigureRestDocs 어노테이션을 추가합니다.
2. MockMvcRequestBuilders -> RestDocumentationRequestBuilders로 변경합니다.
기존 코드
// when val perform = mockMvc.perform( MockMvcRequestBuilders .get("/video") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_JSON) .param("size", "3") .param("page", "0") )
변경 코드
// when val perform = mockMvc.perform( RestDocumentationRequestBuilders .get("/video") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_JSON) .param("size", "3") .param("page", "0") )
Request Parameters 받는 방법
이외에도 공식문서에 다른 방법들도 잘 정리되어 있습니다.
RestDocs 공식문서
https://docs.spring.io/spring-restdocs/docs/current/reference/html5/
추가된 코드
perform .andExpect(MockMvcResultMatchers.status().isOk) .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON)) .andExpect( jsonPath("$.data.contents[0].videoNo").value(1L) ) .andExpect( jsonPath("$.data.contents[0].subject").value("mySubject") ).andDo( document( "video-show-paging-videos", preprocessRequest(prettyPrint()), preprocessResponse(prettyPrint()), requestParameters( parameterWithName("size").description("페이징 사이즈"), parameterWithName("page").description("페이지 번호"), ), responseFields( fieldWithPath("message").description("응답 메시지"), fieldWithPath("data.contents[].videoNo").description("비디오 번호"), fieldWithPath("data.contents[].subject").description("제목"), fieldWithPath("data.contents[].imageUrl").description("이미지 URL"), fieldWithPath("data.totalPage").description("총 페이지 수"), fieldWithPath("data.totalElements").description("총 비디오 개수"), fieldWithPath("data.curPage").description("현재 페이지"), fieldWithPath("data.size").description("페이징 사이즈"), ) ) )
이상 코틀린에 RestDocs를 적용하는 방법에 대해 알아보았습니다.
조금 더 다양한 방법으로 RestDocs를 사용하고 싶다면 다음 글을 참고하시면 좋을 것 같습니다.
https://junuuu.tistory.com/418?category=1014988
출처
https://junuuu.tistory.com/418?category=1014988
https://kth990303.tistory.com/347
'프로젝트 > 미디어 스트리밍 서버 프로젝트' 카테고리의 다른 글
동시성 문제를 해결하자 (3) 2022.09.30 배포 스크립트 작성하기 (0) 2022.09.29 MultipartFile 컨트롤러 단위 테스트(MockMvc) (0) 2022.08.24 Kotest와 MockK를 활용하여 컨트롤러 단위테스트하기 (0) 2022.08.23 ffmpeg install (Mac OS, Amazon Linux) (0) 2022.08.22