[spring boot] Spring Rest Docs
1. 의존성 추가하기
dependencies {
testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'
}
2. asciidoc 파일을 build 폴더로 복사하기 위한 플러그인 추가
plugins {
id "org.asciidoctor.jvm.convert" version "3.3.2"
}
3. gradle task 지정
ext{
snippetDir = file('build/generated-snippets')
}
test {
useJUnitPlatform()
outputs.dir snippetDir
}
asciidoctor {
inputs.dir snippetDir
dependsOn test
}
task copyDocument(type: Copy) {
dependsOn asciidoctor
from file("build/docs/asciidoc/")
into file("src/main/resources/static/docs")
}
bootJar {
dependsOn copyDocument
from file('src/main/resources/static/docs')
into file('build/resources/main/static/docs')
}
4. 테스트 코드 작성 예시
spring rest docs는 동작하는 테스트에 대한 문서를 만들기 떄문에 단위 테스트가 아닌 통합테스트를 문서로 만드는게 나아 보임.
@ExtendWith(RestDocumentationExtension.class)
@SpringBootTest
class DemoApiTest {
private MockMvc mockMvc;
private RestDocumentationResultHandler document;
@BeforeEach
void setUp(RestDocumentationContextProvider restDocumentation, WebApplicationContext context) {
document = document("{class-name}/{method-name}",
preprocessResponse(prettyPrint()));
mockMvc = MockMvcBuilders.webAppContextSetup(context)
.apply(documentationConfiguration(restDocumentation))
.alwaysDo(document)
.build();
}
@Test
void getDemo() throws Exception {
mockMvc.perform(get("/"));
}
}
5. document 작성 예시
src/docs/asciidoc 하위에 adoc 파일 작성
= Spring REST Docs
:doctype: book
:icons: font
:source-highlighter: highlightjs
:toc: left
:toclevels: 2
:sectlinks:
ifndef::snippets[]
:snippets: ./build/generated-snippets
endif::[]
[[Member_API]]
== Demo API
[[Demo_조회]]
=== Demo 조회
include::{snippets}/demo-api-test/get-demo/http-request.adoc[]
include::{snippets}/demo-api-test/get-demo/http-response.adoc[]