코틀린

Kotlin으로 Spring Rest Docs 삽질하기 (feat. 제작 근로)

newwisdom 2021. 8. 14. 15:57
반응형

2021-07-06글

Spring Rest Docs 설정 - build.gradle.kts

플러그인 추가

plugins{
    // ...
    id("org.asciidoctor.convert") version "1.5.9.2"
}

asciidoctor, Spring Rest Docs 의존성 추가

asciidoctor("org.springframework.restdocs:spring-restdocs-asciidoctor:2.0.5.RELEASE")
testImplementation("org.springframework.restdocs:spring-restdocs-mockmvc:2.0.5.RELEASE")

snippets 저장 경로 지정

val snippetsDir by extra { file("build/generated-snippets") }

task 추가

tasks {
    // ...
    test {
        useJUnitPlatform()
        outputs.dir(snippetsDir)
    }

    asciidoctor {
        inputs.dir(snippetsDir)
        dependsOn(test)
    }

    bootJar {
        dependsOn(asciidoctor)
        from("$snippetsDir/html5") {
            into("static/docs")
        }
    }
}

➕ tasks - 사용자 정의 task를 만들 수 있음

테스크란?
  • gradle은 명령에의해 테스크(Task)를 수행하는 프로그램
  • gradle compileJava , gradle run 등 명령어를 통해 실행하는 것들이 모두 테스크
  • Gradle 프로젝트의 작업단위
  • Task는 독립적인 액션을 수행할 수 있고, 다른 Task에 대한 의존성을 설정할 수 있음

Spring Rest Docs 삽질 기록

  • build.gradle.kts 설정을 끝냄
  • generated-snippets 폴더는 만들어 지지만 테스트 코드를 돌려도 스닙펫이 만들어지지 않는 문제 발생
  • build.gradle.kts 문제일줄 알았으나 아니었다

  • 테스트 코드가 dsl 로 되어 있음

mockMvc 설정

  • @AutoConfigureRestDocs 를 사용하기 위해 @AutoConfigureMockMvc 를 통해 수동 설정해주고 싶었으나
  • @AutoConfigureMockMvc 를 해주면 utf-8 설정을 할 수 없는 오류 발생
  • 때문기존 코드는 mockMvc를 수동 설정해주고 있었음
  • 이러면 @AutoConfigureRestDocs 이 먹히지 않기 때문에 아래와 같은 오류 발생

  • 다음 설정을 통해 RestDocs 관련 설정도 mockmvc에 추가

어노테이션 추가

@Import(RestDocsConfiguration::class)
@ExtendWith(RestDocumentationExtension::class, SpringExtension::class)

setUp

@BeforeEach
internal fun setUp(
    webApplicationContext: WebApplicationContext,
    restDocumentationContextProvider: RestDocumentationContextProvider
) {
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
        .addFilter<DefaultMockMvcBuilder>(CharacterEncodingFilter("UTF-8", true))
        .alwaysDo<DefaultMockMvcBuilder>(MockMvcResultHandlers.print())
        .apply<DefaultMockMvcBuilder>(
            MockMvcRestDocumentation.documentationConfiguration(
                restDocumentationContextProvider
            )
        )
        .build()
}

참고자료

반응형