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()
}