46.3.21자동 구성된 Spring REST Docs 테스트
@AutoConfigureRestDocs 어노테이션을 사용하여 Mock MVC, REST Assured 또는 WebTestClient로 테스트 할 때 Spring REST Docs를 사용할 수있습니다. Spring REST Docs에서 JUnit 룰의 필요성을 제거합니다.
@AutoConfigureRestDocs를 사용하여 기본 출력 디렉토리 (Maven을 사용하는 경우 target / generated-snippets 또는 Gradle을 사용하는 경우 build / generated-snippets)를 무시할 수 있습니다. 문서화 된 URI에 나타나는 호스트, 구성표 및 포트를 구성하는 데 사용할 수도 있습니다.
Auto-configured Spring REST Docs Tests with Mock MVC
@AutoConfigureRestDocs는 Spring REST Docs를 사용하기 위해 MockMvc 빈을 커스터마이즈합니다. 다음 예제와 같이 @Autowired를 사용하여 삽입하고 Mock MVC 및 Spring REST Docs를 사용할 때 평소와 같이 테스트에 사용할 수 있습니다.
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
@AutoConfigureRestDocs
public class UserDocumentationTests {
@Autowired
private MockMvc mvc;
@Test
public void listUsers() throws Exception {
this.mvc.perform(get("/users").accept(MediaType.TEXT_PLAIN))
.andExpect(status().isOk())
.andDo(document("list-users"));
}
}
@AutoConfigureRestDocs의 속성보다 Spring REST Docs 구성을 더 많이 제어해야하는 경우 다음 예제와 같이 RestDocsMockMvcConfigurationCustomizer 빈을 사용할 수 있습니다.
@TestConfiguration
static class CustomizationConfiguration
implements RestDocsMockMvcConfigurationCustomizer {
@Override
public void customize(MockMvcRestDocumentationConfigurer configurer) {
configurer.snippets().withTemplateFormat(TemplateFormats.markdown());
}
}
WebTestClient로 자동 구성된 Spring REST Docs 테스트
@AutoConfigureRestDocs는 WebTestClient와 함께 사용할 수도 있습니다. 다음 예제와 같이 @Autowired를 사용하여 주입 할 수 있으며 @WebFluxTest 및 Spring REST Docs를 사용할 때 평상시처럼 테스트에 사용할 수 있습니다.
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs;
import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.reactive.server.WebTestClient;
import static org.springframework.restdocs.webtestclient.WebTestClientRestDocumentation.document;
@RunWith(SpringRunner.class)
@WebFluxTest
@AutoConfigureRestDocs
public class UsersDocumentationTests {
@Autowired
private WebTestClient webTestClient;
@Test
void listUsers() {
this.webTestClient.get().uri("/").exchange().expectStatus().isOk().expectBody()
.consumeWith(document("list-users"));
}
}
REST Assured로 자동 구성된 Spring REST Docs 테스트
@AutoConfigureRestDocs는 테스트에서 사용할 수있는 Spring REST Docs를 사용하도록 미리 구성된 RequestSpecification 빈을 만든다. 다음 예제와 같이 @Autowired를 사용하여 주입하고 REST Assured 및 Spring REST Docs를 사용하는 경우와 같이 테스트에서 사용할 수 있습니다.
import io.restassured.specification.RequestSpecification;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.test.context.junit4.SpringRunner;
import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.is;
import static org.springframework.restdocs.restassured3.RestAssuredRestDocumentation.document;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureRestDocs
public class UserDocumentationTests {
@LocalServerPort
private int port;
@Autowired
private RequestSpecification documentationSpec;
@Test
public void listUsers() {
given(this.documentationSpec).filter(document("list-users")).when().port(this.port).get("/").then().assertThat()
.statusCode(is(200));
}
}
@AutoConfigureRestDocs의 속성에 의해 제공되는 것보다 Spring REST Docs 구성을 더 많이 제어해야하는 경우 다음 예제와 같이 RestDocsRestAssuredConfigurationCustomizer 빈을 사용할 수 있습니다.
@TestConfiguration
public static class CustomizationConfiguration implements RestDocsRestAssuredConfigurationCustomizer {
@Override
public void customize(RestAssuredRestDocumentationConfigurer configurer) {
configurer.snippets().withTemplateFormat(TemplateFormats.markdown());
}
}
Last updated
Was this helpful?