๐ŸคRyusun๐Ÿค 2022. 12. 19. 15:00

Test Code

์ œํ’ˆ ๋˜๋Š” ์„œ๋น„์Šค์˜ ํ’ˆ์งˆ์„ ํ™•์ธํ•˜๊ณ  ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ฒ„๊ทธ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.  
์ฆ‰, ํ•จ์ˆ˜, ํŠน์ •ํ•œ ๊ธฐ๋Šฅ, UI, ์„ฑ๋Šฅ, API์ŠคํŽ™์ด ์˜ˆ์ƒ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์ข…๋ฅ˜

 

 

  • ํ…Œ์ŠคํŠธ ํ”ผ๋ผ๋ฏธ๋“œ๋Š” ๋Œ€์ƒ ๋ฒ”์œ„๋‚˜ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ Unit test(๋‹จ์œ„ ํ…Œ์ŠคํŠธ), Integration test(ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ), UI ํ…Œ์ŠคํŠธ(E2E ํ…Œ์ŠคํŠธ) 3๊ฐ€์ง€์˜ ํ…Œ์ŠคํŠธ๋กœ ๋‚˜๋ˆ„์–ด์ง‘๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๋ถ„๋“ค์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ๊ณตํ†ต์ ์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ํ…Œ์ŠคํŠธ๋“ค์„ ๋ชจ์•„๋†“์€ ๊ฒƒ์ด ํ…Œ์ŠคํŠธ ํ”ผ๋ผ๋ฏธ๋“œ์ž…๋‹ˆ๋‹ค.

 

1. Unit Test

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

 

2.  Integration test

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

 

3. User interface Test(E2E Test)

  • End-to-End์˜ ์ค„์ž„๋ง๋กœ ๋๊ณผ ๋์˜ ํ…Œ์ŠคํŠธ
  • ์‹ค์ œ ์‚ฌ์šฉ์ž๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ํ™”๋ฉด์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜์—ฌ ์„œ๋น„์Šค์˜ ๊ธฐ๋Šฅ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ํƒ€์ด์–ด๋‚˜ ์—”์ง„ ๋“ฑ ๋ถ€๋ถ„์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์ด ์•„๋‹ˆ๋ผ ์—‘์…€๊ณผ ๋ธŒ๋ ˆ์ดํฌ, ์—”์ง„ ๋“ฑ ์ฐจ๊ฐ€ ๋‚˜์•„๊ฐ€๋Š”์ง€ ์ „์ฒด์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • UI ํ…Œ์ŠคํŠธ๋Š” ์‹ค์ œ ์•ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ํ๋ฆ„์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ํ•จ์œผ๋กœ์จ UI ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์‚ฌ์ „์— ์ฐจ๋‹จํ•จ์œผ๋กœ์จ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค. 
  • ํ•˜์ง€๋งŒ ํ™”๋ฉด๊ณผ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ด€๋˜์–ด์žˆ๋Š” ํ…Œ์ŠคํŠธ์ด๋‹ค๋ณด๋‹Œ ์‹คํ–‰ ์‹œ๊ฐ„๋„ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ๋””์ž์ธ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์ˆ˜์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ๋„ ํฝ๋‹ˆ๋‹ค.

 

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์˜ ์žฅ์ 

  • ๊ฐœ๋ฐœ ๊ณผ์ • ์ค‘ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค. (์—๋Ÿฌ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋ณด๋‹ค ๋นจ๋ฆฌ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค.)
  • ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฝ”๋“œ ๋ฆฌํŽ™ํ† ๋ง์„ ์œ ์—ฐํ•˜๊ณ  ์•ˆ์ •์ ์ธ ๋Œ€์‘์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค.
  • ์ฝ”๋“œ์˜ ๋ชจ๋“ˆํ™”๋ฅผ ํ•œ ๋ฒˆ ๋” ๊ณ ๋ฏผํ•˜๊ฒŒ ํ•ด ์ค€๋‹ค.
  • ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ, ๋ณ€๊ฒฝ ๋ถ€๋ถ„์œผ๋กœ ์ธํ•œ ์˜ํ–ฅ๋„๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹ ๋ฐ ๊ฒฐ๊ณผ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

TDD (Test Driven Development)

  • ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ
  • ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์งœ๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ๋งŒํผ์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.
  • ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ณ  ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์ดํ›„์—” ๋ฆฌํŒฉํ„ฐ๋ง์œผ๋กœ ํšจ์œจ์„ฑ ํ–ฅ์ƒํ•œ๋‹ค.

 

TDD ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค

 

  • Red } ๋‹จ๊ณ„์—์„œ๋Š” ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • Green } ๋‹จ๊ณ„์—์„œ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์„ฑ๊ณต์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • Yellow } ๋‹จ๊ณ„์—์„œ๋Š” ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ, ์ผ๋ฐ˜ํ™” ๋“ฑ์˜ ๋ฆฌํŒฉํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ณ  ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด TDD์ด๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€ ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๊นŒ์ง€ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๊ณผ, ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ •๋„์˜ ์ตœ์†Œ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

 

TDD์˜ ์žฅ์ 

  • ๋ชจ๋“  ์š”๊ตฌ์‚ฌํ•ญ, ๋ชฉํ‘œ์— ๋Œ€ํ•ด์„œ ์ ๊ฒ€ํ•  ์ˆ˜ ์žˆ๊ณ , ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
    (์‹œ์Šคํ…œ ์ „๋ฐ˜์ ์ธ ์„ค๊ณ„ ํ–ฅ์ƒ)
  • ๊ตฌํ˜„๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์ง‘์ค‘ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ํ€„๋ฆฌํ‹ฐ๋Š” ํ–ฅ์ƒ๋˜๊ณ  ์‹œ์Šคํ…œ ์ „๋ฐ˜์ ์ธ ์„ค๊ณ„๋ฅผ ํ–ฅ์ƒํ•œ๋‹ค. 
  • ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ์œจ์ด ๋†’์•„์ง„๋‹ค.
  • ์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง ๋ฐฉ์ง€
  • ์„ค๊ณ„์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์— ๋น ๋ฅด๋‹ค.

 

์ผ๋ฐ˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹๊ณผ TDD ๊ฐœ๋ฐœ ๋ฐฉ์‹์˜ ์ฐจ์ด์ 

 

์ผ๋ฐ˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹

๋ณดํ†ต ๊ฐœ๋ฐœ ๋ฐฉ์‹์€ โ€˜์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„ โ†’ ์„ค๊ณ„ โ†’ ๊ฐœ๋ฐœ โ†’ ํ…Œ์ŠคํŠธ โ†’ ๋ฐฐํฌโ€™์˜ ํ˜•ํƒœ์˜ ๊ฐœ๋ฐœ ์ฃผ๊ธฐ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

 

 

์ผ๋ฐ˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹์˜ ๋ฌธ์ œ์ 

  1. ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ๋А๋ฆฌ๊ฒŒ ํ•˜๋Š” ์ž ์žฌ์  ์œ„ํ—˜์ด ์กด์žฌํ•œ๋‹ค.
  2. ์†Œ๋น„์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ช…ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
  3. ๋”ฐ๋ผ์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์™„๋ฒฝํ•œ ์„ค๊ณ„๋Š” ์–ด๋ ต๋‹ค.
  4. ์ž์ฒด ๋ฒ„๊ทธ ๊ฒ€์ถœ ๋Šฅ๋ ฅ ์ €ํ•˜ ๋˜๋Š” ์†Œ์Šค์ฝ”๋“œ์˜ ํ’ˆ์งˆ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.
  5. ์ž์ฒด ํ…Œ์ŠคํŠธ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒ๋˜๋Š” ์ด์œ ๋Š” ์–ด๋А ํ”„๋กœ์ ํŠธ๋“  ์ดˆ๊ธฐ ์„ค๊ณ„๊ฐ€ ์™„๋ฒฝํ•˜์ง€ ์•Š์•„ ์žฌ์„ค๊ณ„๋กœ ์ธํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…, ์ˆ˜์ •, ์‚ญ์ œํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ๋‚จ๊ฑฐ๋‚˜ ์ค‘๋ณต๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ผ๋ฐ˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹์€ ๊ณ ๊ฐ์˜ ์š”๊ตฌ์‚ฌํ•ญ ๋˜๋Š” ๋””์ž์ธ์˜ ์˜ค๋ฅ˜ ๋“ฑ ๋งŽ์€ ์™ธ๋ถ€ ๋˜๋Š” ๋‚ด๋ถ€ ์กฐ๊ฑด์— ์˜ํ•ด ์žฌ์„ค๊ณ„ํ•˜์—ฌ ์ ์ง„์ ์œผ๋กœ ์™„๋ฒฝํ•œ ์„ค๊ณ„๋กœ ๋‚˜์•„๊ฐ€๋Š”๋ฐ, ๊ฒฐ๋ก ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์ฝ”๋“œ๋“ค์€ ์žฌ์‚ฌ์šฉ์ด ์–ด๋ ต๊ณ  ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ์„œ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ž‘์€ ๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ ์ˆ˜์ •์—๋„ ๋ชจ๋“  ๋ถ€๋ถ„์„ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ „์ฒด์ ์ธ ๋ฒ„๊ทธ๋ฅผ ๊ฒ€์ถœํ•˜๊ธฐ ์–ด๋ ค์›Œ์ ธ ์ž์ฒด ๋ฒ„๊ทธ ๊ฒ€์ถœ ๋Šฅ๋ ฅ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž‘์€ ์ˆ˜์ •์—๋„ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ž์ฒด ํ…Œ์ŠคํŠธ ๋น„์šฉ์ด ์ฆ๊ฐ€๋ฉ๋‹ˆ๋‹ค.

 

 

TDD ๊ฐœ๋ฐœ ๋ฐฉ์‹

 

TDD์™€ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ ๋ฐฉ์‹์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๋’ค์— ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋””์ž์ธ(์„ค๊ณ„) ๋‹จ๊ณ„์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชฉ์ ์„ ๋ฐ˜๋“œ์‹œ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด์•ผ๋งŒ ํ•˜๊ณ  ๋˜ ๋ฌด์—‡์„ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ• ์ง€ ๋ฏธ๋ฆฌ ์ •์˜(ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ) ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋„์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์‚ฌํ•ญ(๋ฒ„๊ทธ ๋ฐ ์ˆ˜์ •์‚ฌํ•ญ)์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ถ”๊ฐ€ํ•˜๊ณ  ์„ค๊ณ„๋ฅผ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ๋œ ์ฝ”๋“œ๋งŒ์„ ์ฝ”๋“œ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ์‹ค์ œ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

 


์ด๋Ÿฌํ•œ ๋ฐ˜๋ณต์ ์ธ ๋‹จ๊ณ„๊ฐ€ ์ง„ํ–‰๋˜๋ฉด์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ฝ”๋“œ์˜ ๋ฒ„๊ทธ๊ฐ€ ์ค„์–ด๋“ค๊ณ  ์†Œ์Šค์ฝ”๋“œ๋Š” ๊ฐ„๊ฒฐํ•ด์ง‘๋‹ˆ๋‹ค.
๋˜ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ์œผ๋กœ ์ธํ•ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์„ค๊ณ„๊ฐ€ ๊ฐœ์„ ๋จ์œผ๋กœ ์žฌ์„ค๊ณ„ ์‹œ๊ฐ„์ด ์ ˆ๊ฐ๋ฉ๋‹ˆ๋‹ค.

 

 

TDD ๊ฐœ๋ฐœ ๋ฐฉ์‹์˜ ๋ฌธ์ œ์ 

 

  1. ์ƒ์‚ฐ์„ฑ ์ €ํ•˜

์ฒ˜์Œ๋ถ€ํ„ฐ 2๊ฐœ์˜ ์ฝ”๋“œ๋ฅผ ์งœ์•ผํ•˜๊ณ  ์ค‘๊ฐ„์ค‘๊ฐ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๊ณ ์ณ๋‚˜๊ฐ€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋А๋ ค์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. TDD ๋ฐฉ์‹์˜ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์€ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ ๋ฐฉ์‹์— ๋น„ํ•ด ๋Œ€๋žต 10~30% ์ •๋„๋กœ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค. 

๋”ฐ๋ผ์„œ SI ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ’ˆ์งˆ๋ณด๋‹ค๋Š” ๋‚ฉ๊ธฐ์ผ ์ค€์ˆ˜๊ฐ€ ํ›จ์”ฌ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— TDD ๋ฐฉ์‹์„ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 


ํ…Œ์ŠคํŠธ ๋„๊ตฌ (JUnit & assertJ)

 

JUnit

  •  ์ž๋ฐ”์šฉ ๋‹จ์œ„ํ…Œ์ŠคํŠธ(Unit Test) ๋„๊ตฌ 

 

 JUnit ํŠน์ง•

  • @Test ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœํ•  ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋…๋ฆฝ์ ์ธ ํ…Œ์ŠคํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์ •(assert) ๋ฉ”์„œ๋“œ๋กœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ค. (๋‹จ์ •๋ฉ”์†Œ๋“œ๋Š” ์•„๋ž˜์— ์ •๋ฆฌ)
  • jUnit4๋ถ€ํ„ฐ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.(@Test @Before @After)
  • ๊ฒฐ๊ณผ๋Š” ์„ฑ๊ณต(๋…น์ƒ‰), ์‹คํŒจ(๋ถ‰์€์ƒ‰) ์ค‘ ํ•˜๋‚˜๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ ์ด์™ธ ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๋ฅผ ์œ ์ถ”ํ•ด๋‚ด๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

assert๋ฉ”์„œ๋“œ ์ •๋ฆฌ

  • assertArrayEquals(a, b) :  ๋ฐฐ์—ด A์™€ B๊ฐ€ ์ผ์น˜ํ•จ์„ ํ™•์ธํ•œ๋‹ค.
  • assertEquals(a, b) : ๊ฐ์ฒด A์™€ B๊ฐ€ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง€๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • assertEquals(a, b, c) :  ๊ฐ์ฒด A์™€ B๊ฐ€ ๊ฐ’์ด ์ผ์น˜ํ•จ์„ ํ™•์ธํ•œ๋‹ค.( a: ์˜ˆ์ƒ๊ฐ’, b:๊ฒฐ๊ณผ๊ฐ’, c: ์˜ค์ฐจ๋ฒ”์œ„)
  • assertSame(a, b) : ๊ฐ์ฒด A์™€ B๊ฐ€ ๊ฐ™์€ ๊ฐ์ฒด์ž„์„ ํ™•์ธํ•œ๋‹ค.
  • assertTrue(a): ์กฐ๊ฑด A๊ฐ€ ์ฐธ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
  • assertNotNull(a) : ๊ฐ์ฑ„ A๊ฐ€ null์ด ์•„๋‹˜์„ ํ™•์ธํ•œ๋‹ค.

 

org.junit.Assert.assertThat

๊ณต์‹ ๋ฌธ์„œ

org.junit.Assert.assertThat์˜ ๊ธฐ๋ณธ ํ˜•ํƒœ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

public static <T> void assertThat(T actual, Matcher<? super T> matcher)

actual ์ธ์ž์— ๊ฒ€์ฆ๋Œ€์ƒ(์‹คํ–‰ ๋‹จ๊ณ„์˜ ๊ฒฐ๊ณผ)์„ ๋„ฃ๊ณ , ์ด์™€ ๋น„๊ตํ•˜๋Š” ๋กœ์ง(matcher)์„ ์ฃผ์ž…๋ฐ›์•„ ๊ฒ€์ฆ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ matcher๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๊ณ , ๊ตฌํ˜„ํ•œ matcher์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
matcher์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋Š”๋ฐ, ์™ธ๋ถ€ ์š”์ธ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๊ฒƒ์€ ์ข‹์€ ํ…Œ์ŠคํŠธ๋ผ๊ณ  ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ์ด์œ  ๋•Œ๋ฌธ์ธ์ง€, JUnit์˜ assertThat์€ hamcrest์— ๊ตฌํ˜„๋œ matcher๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

AssertJ

  • Java ํ…Œ์ŠคํŠธ์—์„œ ์œ ์ฐฝํ•˜๊ณ  ํ’๋ถ€ํ•œ assertions๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ ๊ฐ€๋…์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ณ  ์ƒ์„ธํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

org.assertj.core.api.Assertions.assertThat

๊ณต์‹ ๋ฌธ์„œ

public static AbstractAssert<SELF, T> assertThat(T actual)

assertj์˜ assertThat์€ ์ธ์ž๋กœ actual(๊ฒ€์ฆ๋Œ€์ƒ)๋งŒ ๋ฐ›์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  actual์˜ ํƒ€์ž…์— ๋”ฐ๋ผ AbstractAssert๋ผ๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•œ Assert ํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

 

๊ฒฐ๋ก 

AssertJ์™€ Junit Assertions ์ค‘ ์–ด๋–ค ๊ฑธ ์จ์•ผ ํ•˜๋‚˜

Assertions๋Š” Junit์ด ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋„ ์žˆ๊ณ , AssertJ์˜ Assertions๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ AssertJ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” JUnit5.Assertions๋Š” IDE๊ฐ€ ์ž๋™ ์™„์„ฑ๋„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฉ”์„œ๋“œ๋ฅผ ์™ธ์›Œ์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด assertJ๋Š” junit์ด ์ œ๊ณตํ•˜๋Š” assert ๋ณด๋‹ค ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•œ ๋ฌธ๋ฒ•์„ ์ œ๊ณตํ•˜๋ฉฐ, ํ•จ์ˆ˜๋ช…์ด ์ง๊ด€์ ์ด์–ด์„œ ๊ฐ€๋…์„ฑ๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

AssertJ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์ด ๋‚˜์˜จ ์˜ˆ์‹œ์—์„œ AssertJ๊ฐ€ ๋” ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.

 

// Junit 
assertEquals(expected, actual);
// to : AssertJ
assertThat(actual).isEqualTo(expected);

 

 

 

 

[์ฐธ์กฐ]

1. https://hanamon.kr/tdd%EB%9E%80-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%A3%BC%EB%8F%84-%EA%B0%9C%EB%B0%9C/

2. https://wooaoe.tistory.com/33

3. https://hanamon.kr/%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1%EC%9D%98-%EC%A4%91%EC%9A%94%EC%84%B1/

4. https://jwkim96.tistory.com/168