-
kotlinDSL + RestDocs 적용하기프로젝트/미디어 스트리밍 서버 프로젝트 2022. 9. 28. 00:01반응형
개요
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/
Spring REST Docs
Document RESTful services by combining hand-written documentation with auto-generated snippets produced with Spring MVC Test, WebTestClient, or REST Assured.
docs.spring.io
추가된 코드
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
Spring Rest Docs 적용하기
개요 프런트엔드와 원활하게 소통하기 위해 API 명세서를 만드려고 합니다. 이때 코드를 기반으로 API 명세서를 만들어주는 Swagger와 Spring RestDocs가 있습니다. 이 둘에 대해 비교해보고 RestDocs를 선
junuuu.tistory.com
출처
https://junuuu.tistory.com/418?category=1014988
Spring Rest Docs 적용하기
개요 프런트엔드와 원활하게 소통하기 위해 API 명세서를 만드려고 합니다. 이때 코드를 기반으로 API 명세서를 만들어주는 Swagger와 Spring RestDocs가 있습니다. 이 둘에 대해 비교해보고 RestDocs를 선
junuuu.tistory.com
https://kth990303.tistory.com/347
[Kotlin] Kotlin DSL + Spring REST Docs + MockMvc 적용기 (1)
현재(22.07.17.) 는 아직 Spring REST Docs에서 kotlin DSL 공식지원을 하지 않고 있는 상황이다. https://github.com/spring-projects/spring-restdocs/issues/677 Document how to use Spring REST Docs with th..
kth990303.tistory.com
'프로젝트 > 미디어 스트리밍 서버 프로젝트' 카테고리의 다른 글
동시성 문제를 해결하자 (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