restAPI ๊ตฌ์กฐ๋ก request๋ @valid ๋ก ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์งํํ๊ณ ์๋ ํ๋ก์ ํธ๊ฐ ์๋ค
๋ ์์ ์ ์ธ ์๋ฒ ์ ๊ณต์ ์ํด API ๊ฐ๋ฐ์ด ๋ชจ๋ ์๋ฃ๋ ์์ ์์ ํ ์คํธ๋ฅผ ์งํํ๋ ค๊ณ ํ๋ค
๊ฐ๋ฐ๊ธฐ๊ฐ์ด ์งง์
๊ฐ๋ฐ์ ํ๋ฉฐ ๋จ์ ํ ์คํธ๋ฅผ ์งํํ๋ TDD ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐํ์ง ์์๊ธฐ ๋๋ฌธ์
์ด์ ์์ ๋จ์ ํ ์คํธ๋ฅผ ์ผ์ผํ ์งํํ๊ธฐ๋ณด๋ค ํตํฉ ํ ์คํธ๋ฅผ ํ๋ ๊ฒ์ด ๋ ์ ํฉํ๋ค๊ณ ํ๋จํ๋ค
post / body ์์
import ...
@SpringBootTest
@AutoConfigureMockMvc
class MissionControllerTest {
@Autowired
MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@Test
@WithUserDetails(value = "1232142์ด์ฉ๊ตฌuserUID")
@Transactional
void createOrPatchMissionSuccess() throws Exception {
String content = objectMapper.writeValueAsString(new MissionInfo(ZonedDateTime.now(), "test"));
mockMvc.perform(post("/v2/mission/info")
.contentType(MediaType.APPLICATION_JSON)
.content(content))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value("0000"))
.andDo(print());
}
}
get ์์
@Test
@WithUserDetails(value = "๋ผ๋ผ๋ผ๋ผใ
userUID")
@Transactional
void getMissionSuccessRecordSuccess() throws Exception {
mockMvc.perform(get("/v2/mission/success"))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value("0000"))
.andDo(print());
}
patch / param ์์
@Test
@WithUserDetails(value = "V8Inlz8q67hhClVGD9gJeRDQ7hY2")
@Transactional
void changeMissionSuccessRecordSuccess() throws Exception {
mockMvc.perform(patch("/v2/mission/success")
.param("id", "1"))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value("0000"))
.andDo(print());
}
delete ์์
@Test
@WithUserDetails(value = "ใ
ใด๋ฏธใ
ใน์ใ
ฃใ
userUID")
@Transactional
void deleteAccountSuccess() throws Exception {
mockMvc.perform(delete("/v2/accounts"))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value("0000"))
.andDo(print());
}
์ฐธ๊ณ ํ ์๋ฃ
Spring Boot - ์คํ๋ง ๋ถํธ ํตํฉํ ์คํธ ๋ฐฉ๋ฒ๊ณผ ํ(Spring boot Integration Test)
Spring Boot แแ ฆแแ ณแแ ณ ์ด๋ฒ ํฌ์คํ ์์๋ Spring Boot์์ ํตํฉํ ์คํธํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. https://medium.com/@ssowonny/%EC%84%A4%EB%A7%88-%EC%95%84%EC%A7%81%EB%8F%84-%ED%85%8C%EC%8A..
galid1.tistory.com
JUnit ์ฌ์ฉ
[JUnit] ์คํ๋ง๋ถํธ + junit5 ํ๊ฒฝ์์ MockMvc๋ก ์ปจํธ๋กค๋ฌ ํ ์คํธํ๊ธฐ
Mock์ด๋? ์ฌ์ ์ ์๋ฏธ๋ก 'ํ ์คํธ๋ฅผ ์ํด ๋ง๋ ๋ชจํ'์ ์๋ฏธํ๊ณ , ํ ์คํธ๋ฅผ ์ํด ์ค์ ๊ฐ์ฒด์ ๋น์ทํ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ์ ๋ชจํน(Mocking), ๋ชจํนํ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ป์ด๋ด๋ ๊ณผ์ ์ ๋ชฉ์ (Mock-
scshim.tistory.com
Junit ์ ๋ฆฌ - MockMvc๋ฅผ ์ด์ฉํ ์ปจํธ๋กค๋ฌ ํ ์คํธ
์ ์ฌ ํ ๊ฐ๋ฐ์ ํ์ง ๋ฒ์จ 3๋ ์ฐจ๊ฐ ๋์๋ค. ๊ฐ๋ฐ์ ์ฒ์ ์ ํ ๋๋ ์ด๋ป๊ฒ ๊ตฌํํด์ผ ํ ์ง ์ด๋ป๊ฒ ๋ง๋ค์ด์ผ ํ๋์ง์ ๋ํ ๊ด์ฌ์ด ๋ ์ปธ๋ค. ํ์ง๋ง ์์๋ ๊ฐ๋ฐ ํ ์ด๋ป๊ฒ ํ ์คํธ๋ฅผ ์งํํ์ฌ ๋จผ
wedul.site
๋จ์ ํ ์คํธ์ Spring Securiy ์ธ์ฆ ๊ด๋ จ ์ด๋ ธํ ์ด์ ๋ค ์ฌ์ฉํ๊ธฐ
๐ ๋ค์ด๊ฐ๋ฉฐ ์๋ ํ์ธ์! ์ด๋ฒ ํฌ์คํ ์์๋ ํ ์คํธํ ๋ Spring Security ์ธ์ฆ์ ํ ์ ์๊ฒ ์ ๊ณต๋๋ ์ด๋ ธํ ์ด์ ๋ค์ ์๊ฐํ๋ ค๊ณ ํฉ๋๋ค. ์ด ํฌ์คํ ์์ ๋ค๋ฃจ๋ ์ด๋ ธํ ์ด์ ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ์ต๋
shinsunyoung.tistory.com
'๊ฐ๋ฐ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ์น ๊ฐ๋ฐ ๋ฐฉ์ (static / MVC / API) (0) | 2022.03.03 |
---|---|
Spring ํ๋ก์ ํธ ์์ฑ (Gradle) (0) | 2022.03.03 |
ZonedDateTime (UTC -> KST) (0) | 2022.02.23 |
GraphQL (spring) (0) | 2021.12.18 |
JavaScript ์์ ์ฝ๋ (axios/restAPI/HackerRank) (0) | 2021.11.18 |