15์žฅ: Testing

Spring ํ…Œ์ŠคํŠธ ๊ธฐ๋ฒ• 2๊ฐ€์ง€

  1. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Test) ํŠน์ • ๋ฉ”์„œ๋“œ์˜ ๋…ผ๋ฆฌ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ํ…Œ์ŠคํŠธ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜๋ฉฐ, ์งง๊ณ  ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ๋กœ ์ž‘์„ฑ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ํŠน์ • ๊ธฐ๋Šฅ๋งŒ ๊ฒ€์ฆ

  2. Spring ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ(Integration Test) ํŠน์ • ๋ฉ”์„œ๋“œ์˜ ๋…ผ๋ฆฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Spring ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ํ†ตํ•ฉ๊นŒ์ง€ ๊ฒ€์ฆ ์˜ˆ๋ฅผ ๋“ค์–ด, Spring์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ๊ธฐ๋Šฅ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ ์˜์กด์„ฑ์„ ํฌํ•จํ•œ ์ „์ฒด ๊ธฐ๋Šฅ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ

๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ž€? ํŠน์ • ์œ ์ฆˆ ์ผ€์ด์Šค๋ฅผ ํŠน์ • ์กฐ๊ฑด์—์„œ ์‹คํ–‰ํ•˜๊ณ , ๊ธฐ๋Œ€ํ•˜๋Š” ๋™์ž‘์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฉ”์„œ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ ์˜์กด์„ฑ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜์—ฌ ํŠน์ • ๋กœ์ง๋งŒ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒ€์ฆ

๋‹จ์œ„ํ…Œ์ŠคํŠธ๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  1. ๊ฐ€์ • ํ…Œ์ŠคํŠธํ•  ๋กœ์ง์ด ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์ž…๋ ฅ๊ฐ’๊ณผ ์˜์กด์„ฑ์„ ์ •์˜

  2. ์‹คํ–‰ ํ…Œ์ŠคํŠธํ•  ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰

  3. ๊ฒ€์ฆ ๊ธฐ๋Œ€ํ•œ ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์ฆ

์œ ์ฆˆ ์ผ€์ด์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋•Œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ์™ธ๋ถ€ ๊ฐ์ฒด๋Š” ๋ชจ๋‘ ์˜์กด์„ฑ์ด๋‹ค. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ํŠน์ • ๋กœ์ง๋งŒ ๊ฒ€์ฆํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์™ธ๋ถ€ ๊ฐ์ฒด๋ฅผ ํ…Œ์ŠคํŠธํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ ๊ฐ€์งœ ๊ฐ์ฒด(Mock)๋ฅผ ๋งŒ๋“ค์–ด์„œ ํŠน์ • ๋™์ž‘์„ ์œ ๋„ํ•œ๋‹ค.

@Mock๋กœ ๊ฐ€์งœ๊ฐ์ฒด์ž„์„ ์•Œ๋ฆฌ๋ฉด @InjectMock ์ฃผ์„์˜ ๊ฐ์ฒด๋Š” @Mock๊ฐ€ ๋ถ™์€ ๊ฐ์ฒด๋“ค์„ ์ฃผ์ž…๋‹นํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์œ„์— @ExtendWith ์ฃผ์„์„ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค. ์ด๋ค„์ ธ์•ผํ•˜๋Š” ํ๋ฆ„์€ given-willReturn๋ฅผ ์ด์šฉํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ช…๋ นํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ์™ธ ํ๋ฆ„์€ assertThrows๋กœ ๊ฒ€์ฆ. verify๋กœ ์˜ˆ์ƒ๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ฆ.

ํ†ตํ•ฉํ…Œ์ŠคํŠธ๋ž€? ์œ ๋‹›ํ…Œ์ŠคํŠธ์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค. ์—ฌ์ „ํžˆ JUnit์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜์ง€๋งŒ, ์œ ๋‹› ํ…Œ์ŠคํŠธ๋Š” ํŠน์ • ์ปดํฌ๋„ŒํŠธ์˜ ๋™์ž‘์— ์ง‘์ค‘ํ•˜๋Š” ๋ฐ˜๋ฉด, ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”์ง€์— ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค. ์•ฑ์—์„œ๋Š” ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•˜๋”๋ผ๋„ ์„œ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ "๋Œ€ํ™”"ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ํ†ตํ•ฉํ…Œ์ŠคํŠธ๋Š” ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ์˜ˆ๋ฐฉํ•˜๋Š”๋ฐ ๋„์›€์„ ์ค€๋‹ค.

์–ด๋–ค ํ†ตํ•ฉ์„ ํ…Œ์ŠคํŠธํ•˜๋Š”๊ฐ€?

  1. ์•ฑ์˜ ๋‘ ๊ฐœ ์ด์ƒ์˜ ๊ฐ์ฒด ๊ฐ„์˜ ํ†ตํ•ฉ

  2. ์•ฑ ๊ฐ์ฒด์™€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ์˜ ํ†ตํ•ฉ

  3. ์•ฑ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ํ†ตํ•ฉ

ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์˜ ๊ตฌ์„ฑ ์œ ๋‹›ํ…Œ์ŠคํŠธ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๊ตฌ์„ฑ๋œ๋‹ค.

  1. ๊ฐ€์ •

  2. ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ

  3. ๊ฒ€์ฆ

์œ ๋‹›ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋ณดํ†ต ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ชจํ‚นํ•˜์ง€๋งŒ, ํ†ตํ•ฉํ…Œ์ŠคํŠธ์—์„œ๋Š” ์ผ๋ถ€ ์ปดํฌ๋„ŒํŠธ๋Š” ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค. @MockBean์„ ์‚ฌ์šฉํ•˜๋ฉด Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ mock ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ๊ฐ์ฒด์˜ ์‹ค์ œ ๋™์ž‘์„ ๊ฒ€์ฆํ•˜๋ฉด์„œ Spring์ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋“ค๊ณผ์˜ ์ƒํ˜ธ์ž‘์šฉ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

Last updated