ํ์ต ์๋ฃ ์ถ์ฒ : https://spring.io/guides/gs/testing-restdocs/
์คํ๋ง ๊ณต์ ๊ฐ์ด๋๊ฐ ์ ๊ณตํ๋ ์ค์ต ํ๋ก์ ํธ : https://github.com/spring-guides/gs-testing-restdocs
์ฐธ๊ณ ํ ๊ธ : https://techblog.woowahan.com/2597/
ํ์ต ๋ชฉํ : Spring ์ดํ๋ฆฌ์ผ์ด์ ์ API๋ฅผ JUnit๊ณผ MockMvc ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ RestDocs๋ฅผ ํ์ฉํด API ๋ฌธ์ํ
์ Rest Docs?
- ํ ์คํธ๊ฐ ์ฑ๊ณตํ์ง ์์ผ๋ฉด ๋ฌธ์๊ฐ ๋ง๋ค์ด์ง์ง ์์ผ๋ฏ๋ก Rest Docs ๋ฌธ์ํ๊ฐ ์๋ฃ๋์๋ค๋ ๊ฒ์ ํ ์คํธ ์ฝ๋ ๋ฐ ํ๋ก๋์ ์ฝ๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ธฐ๋ฅํ๋ค๋ ์๋ฏธ์ด๋ฏ๋ก API์ ์ ๋ขฐ๋๋ฅผ ๋์ด๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ๊ฒ์ฆํ ์ ์๋ค.
1. ์ดํ๋ฆฌ์ผ์ด์ ์์ฑ ๋ฐ ์คํ
1) HomeController.java ์์ฑ
2) TestingRestdocsApplication.java
package com.example.testingrestdocs;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TestingRestdocsApplication {
public static void main(String[] args) {
SpringApplication.run(TestingRestdocsApplication.class, args);
}
}
* ๋์๊ฒจ๋ณด๋ ์คํ๋ง ๋ถํธ ๋น๋ ์ ์ฌ์ฉํ๋ ์ฃผ์
@SpringBootApplication : ๋ค์์ ์ฃผ์์ ์ถ๊ฐํ ์ ์๋ ํธ์ ์ฃผ์
- @Configuration : ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ์ํ ๋น์ ์ ์ํ๋ ์ค์ ํด๋์ค์ ๋ํด Spring Boot๊ฐ ์ ์ ์๋๋ก ์ฃผ์ ํ์
- @EnableAutoConfiguration : ํด๋์ค ๊ฒฝ๋ก ์ค์ ๋ฑ spring.factories ๋ด๋ถ ์ค์ ๋ค์ด ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ์ฉ์ด ๋์ด ๋น์ด ์์ฑ์ด ๋๊ณ , ์คํ๋ง ๋ถํธ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ์ ์๊ฒ ๋ง๋ค์ด์ค๋ค.
- @EnableWebMvc : ์ดํ๋ฆฌ์ผ์ด์ ์ด ์น์์ ๋์ํ ์ ์๋๋ก Spring Mvc ํ๋ ์์ํฌ์ ์ฃผ์ ๊ธฐ๋ฅ์ ํ์ฑํํ ์ ์๋ค. spring์ DispatcherServlet ๋ฑ๋ก, ViewResolver ์ค์ , HandlerMapping ๋ฑ๋ก, MessageConverter ํ์ฑํ, StaticResourceHandler ๋ฑ๋ก
https://cdaosldk.tistory.com/54
- @ComponentScan : @Component ๋ฐ ์คํ ๋ ์ค ํ์ ์ด๋ ธํ ์ด์ ์ด ๋ถ์ฌ๋ ํด๋์ค๋ฅผ ์ค์บํด ๋น์ผ๋ก ๋ฑ๋ก
2. ํ ์คํธ ์๋ํ
1) Junit ๋ฐ Spring Rest Docs ์ข ์์ฑ ์ถ๊ฐ : @MockMvc ์ฌ์ฉ
2) ํตํฉ ํ ์คํธ๋ฅผ ์คํํ ํ ์คํธ ์ฝ๋ ์์ฑ
3) @Service๋ Mock ๊ฐ์ฒด๋ฅผ ํ์ฉํ๋ค.
4) Controller Test ์์ฑ
package com.example.testingrestdocs;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.hamcrest.Matchers.containsString;
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.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@WebMvcTest(HomeController.class)
// apply(documentationConfiguration(restDocumentation))์ค์ ์๋ํ
@AutoConfigureRestDocs(outputDir = "target/snippets")
public class WebLayerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void shouldReturnDefaultMessage() throws Exception {
this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
.andExpect(content().string(containsString("Hello, World")))
.andDo(document("home"));
}
}
5) ์ค๋ํซ์ด ์์ฑ๋๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํ๋ค.
6) ํ ์คํธ ํ asciidoctor ์คํ ์ค์ ~ asciidoctor๋ adoc ํ์ผ์ html ๋ฑ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ๋๊ตฌ
3. ๋ฌธ์ ์์ฑ
1) ์์ฑ๋ adoc ์ค๋ํซ์ ๋ชจ์ .adoc ํ์ผ์ ์์ฑํ๊ณ ๋ฌธ์๋ฅผ ์์ฑํ๋ค.
2) asciidoctor๋ฅผ ์คํํด html ๋ฌธ์๋ฅผ ์์ฑํ ์ ์๋ค.
3) jar์ ๋ฌธ์๋ฅผ ์ถ๊ฐํด ์คํ๋ง ๋ถํธ ์ดํ๋ฆฌ์ผ์ด์ ๋น๋ ์ html ๋ฌธ์๋ฅผ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ ๊ณตํ ์ ์๋๋ก ํ๋ค.
'TIL, WIL > TIL๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
05. 18 TIL (0) | 2023.05.18 |
---|---|
05. 17 TIL (0) | 2023.05.17 |
04. 28 TIL (0) | 2023.04.28 |
04. 13 TIL (0) | 2023.04.13 |
04. 08 TIL (0) | 2023.04.08 |