test strategy - lets-go-trip/treaXure-backend GitHub Wiki

Spring ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์ข…๋ฅ˜

โœ… Spring ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์ „๋žต ์š”์•ฝ

ํ…Œ์ŠคํŠธ ์ข…๋ฅ˜ ๋ชฉ์  ๋Œ€ํ‘œ ๊ธฐ์ˆ  ์žฅ์  ๋‹จ์ 
๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์„œ๋น„์Šค ๋กœ์ง ๊ฒ€์ฆ @Mock, @InjectMocks ๋น ๋ฅด๊ณ  ๋…๋ฆฝ์  DB ํ…Œ์ŠคํŠธ ๋ถˆ๊ฐ€
์Šฌ๋ผ์ด์Šค ํ…Œ์ŠคํŠธ JPA Repository ๊ฒ€์ฆ @DataJpaTest ๋น ๋ฆ„, JPA ํ…Œ์ŠคํŠธ ํŠนํ™” ์„œ๋น„์Šค/์ปจํŠธ๋กค๋Ÿฌ ์ œ์™ธ
Testcontainers ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์‹ค์ œ DB ํ™˜๊ฒฝ ๊ฒ€์ฆ @DataJpaTest or @SpringBootTest + Testcontainers ์‹ค์ œ ํ™˜๊ฒฝ ์œ ์‚ฌ ๋А๋ฆผ, Docker ํ•„์š”
์ „์ฒด ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๊ณ„์ธต ๊ฐ„ ์—ฐ๋™ ํ™•์ธ @SpringBootTest ์‹ค์ œ ํ๋ฆ„ ๊ฒ€์ฆ ๋А๋ฆผ, ๋””๋ฒ„๊น… ์–ด๋ ค์›€
WebMvcTest ์ปจํŠธ๋กค๋Ÿฌ ๋‹จ๋… ํ…Œ์ŠคํŠธ @WebMvcTest + @MockBean ๋น ๋ฆ„, ์›น ๊ณ„์ธต๋งŒ ๊ฒ€์ฆ ์‹ค์ œ ์„œ๋น„์Šค ๋™์ž‘ ์•„๋‹˜
BDD ํ…Œ์ŠคํŠธ ๊ฐ€๋…์„ฑ ๋†’์€ ํ…Œ์ŠคํŠธ given-when-then (Mockito) ๋ช…ํ™•ํ•œ ์˜๋„ ํ‘œํ˜„ ์ž‘์„ฑ ๋ณต์žก ๊ฐ€๋Šฅ
REST API ํ…Œ์ŠคํŠธ HTTP API ๋™์ž‘ ํ™•์ธ RestAssured, MockMvc ์‘๋‹ต ๊ฒ€์ฆ ์ •ํ™• ๋А๋ฆผ, ์„ค์ • ๋ณต์žก

๐Ÿ’ก ์ •๋ฆฌ ๋ฉ”๋ชจ

  • "๋‹จ์œ„(Unit)" โ†’ "ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ๋‚˜ ํด๋ž˜์Šค ๋‹จ๋…"
  • "์Šฌ๋ผ์ด์Šค(Slice)" โ†’ "๊ณ„์ธต ์ค‘ ์ผ๋ถ€๋งŒ ์ž˜๋ผ ํ…Œ์ŠคํŠธ"
  • "ํ†ตํ•ฉ(Integration)" โ†’ "์—ฌ๋Ÿฌ ๊ณ„์ธต์ด ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ"
  • "์ „์ฒด ํ†ตํ•ฉ(Full Integration)" โ†’ "์Šคํ”„๋ง ๋ถ€ํŠธ ์ „์ฒด ์•ฑ์„ ์‹ค์ œ์ฒ˜๋Ÿผ ํ…Œ์ŠคํŠธ"

๐Ÿงญ ์„ ํƒ ๊ฐ€์ด๋“œ

๋ชฉ์  ์ถ”์ฒœ ๋ฐฉ๋ฒ•
์„œ๋น„์Šค ๋กœ์ง๋งŒ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ฆํ•˜๊ณ  ์‹ถ๋‹ค โœ… Mockito ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
Repository ์ฟผ๋ฆฌ๊ฐ€ ์ •ํ™•ํ•œ์ง€ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ถ๋‹ค โœ… @DataJpaTest or Testcontainers
์‹ค์ œ DB์—์„œ ์šด์˜ ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ถ๋‹ค โœ… Testcontainers ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
์ „์ฒด ๊ธฐ๋Šฅ ํ๋ฆ„(Controller โ†’ DB) ํ…Œ์ŠคํŠธ ํ•„์š” โœ… @SpringBootTest
Controller ์ž…๋ ฅ/์‘๋‹ต๋งŒ ๊ฒ€์ฆํ•˜๊ณ  ์‹ถ๋‹ค โœ… @WebMvcTest
โš ๏ธ **GitHub.com Fallback** โš ๏ธ