코틀린
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 로 되어 있음
- https://github.com/spring-projects/spring-restdocs/issues/677
- dsl 일 경우
handle()
을 통해document()
실행해야함 - 이걸몰라서 하루는 날린 것 같다.......
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()
}
참고자료
반응형