TDD κ°œμš”

@WonyuΒ· March 04, 2025 Β· 4 min read

πŸ“Œ TDDλž€?

βœ… ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•œ 후에 μ‹€μ œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 개발 방법둠
βœ… μš”κ΅¬μ‚¬ν•­μ„ 기반으둜 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό λ¨Όμ € λ§Œλ“€κ³ , κ·Έ ν…ŒμŠ€νŠΈλ₯Ό 톡과할 수 μžˆλ„λ‘ μ΅œμ†Œν•œμ˜ μ½”λ“œλ₯Ό μž‘μ„±ν•œ ν›„, 이λ₯Ό μ μ§„μ μœΌλ‘œ κ°œμ„ ν•˜λŠ” 방식

3단계 사이클

cycle

  1. RED (μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈ μž‘μ„±)

    • κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μ „, λ¨Όμ € ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•œλ‹€.
    • μ²˜μŒμ—λŠ” λ‹Ήμ—°νžˆ μ‹€νŒ¨ν•œλ‹€.
  2. GREEN (ν…ŒμŠ€νŠΈκ°€ ν†΅κ³Όν•˜λ„λ‘ μ΅œμ†Œν•œμ˜ μ½”λ“œ μž‘μ„±)

    • ν…ŒμŠ€νŠΈκ°€ 톡과할 수 μžˆλ„λ‘ μ΅œμ†Œν•œμ˜ μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€.
    • λ³΅μž‘ν•œ μ΅œμ ν™” 없이 κ°€μž₯ λ‹¨μˆœν•œ 해결책을 μ μš©ν•œλ‹€.
  3. BLUE (λ¦¬νŒ©ν† λ§)

    • 쀑볡을 μ œκ±°ν•˜κ³ , 더 λ‚˜μ€ μ½”λ“œ ꡬ쑰둜 κ°œμ„ ν•œλ‹€.
    • ν…ŒμŠ€νŠΈλ₯Ό λ‹€μ‹œ μ‹€ν–‰ν•˜μ—¬ λ¦¬νŒ©ν† λ§ κ³Όμ •μ—μ„œ κΈ°λŠ₯이 κΉ¨μ§€μ§€ μ•Šμ•˜λŠ”μ§€ ν™•μΈν•œλ‹€.

TDD의 ν•„μš”μ„±

πŸ”Ή 섀계 κ°œμ„ 
ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜λ©΄μ„œ μ‹œμŠ€ν…œμ˜ ꡬ쑰와 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ³ λ―Όν•˜κ²Œ λ˜μ–΄ 더 λ‚˜μ€ 섀계λ₯Ό μœ λ„ν•œλ‹€.

πŸ”Ή μž₯기적인 κ΄€μ μ—μ„œ 개발 λΉ„μš© κ°μ†Œ
μ½”λ“œμ˜ μ•ˆμ •μ„±μ΄ μ¦κ°€ν•˜κ³ , λ¦¬νŒ©ν† λ§μ— μš©μ΄ν•œ μ½”λ“œκ°€ λ˜λ―€λ‘œ μž₯기적으둜 개발 속도λ₯Ό ν–₯μƒμ‹œν‚¨λ‹€.


πŸ“Œ ν…ŒμŠ€νŠΈ μ’…λ₯˜

λ‹¨μœ„ ν…ŒμŠ€νŠΈ (Unit Test)

βœ… κ°€μž₯ λ§Žμ€ λΉ„μœ¨μ„ μ°¨μ§€ν•˜λŠ” ν…ŒμŠ€νŠΈ
βœ… κ°œλ³„ ν•¨μˆ˜, 클래슀, λͺ¨λ“ˆμ„ λ…λ¦½μ μœΌλ‘œ ν…ŒμŠ€νŠΈ

톡합 ν…ŒμŠ€νŠΈ (Integration Test)

βœ… μ—¬λŸ¬ λͺ¨λ“ˆμ΄ κ²°ν•©λ˜μ—ˆμ„ λ•Œ μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈ
βœ… ν…ŒμŠ€νŠΈ 격리 μ „λž΅μ΄ ν•„μš”

E2E ν…ŒμŠ€νŠΈ (End-to-End Test)

βœ… μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 전체적인 흐름 ν…ŒμŠ€νŠΈ


πŸ“Œ FIRST 원칙

βœ… ν…ŒμŠ€νŠΈ μ½”λ“œκ°€ κ°–μΆ”μ–΄μ•Ό ν•  5κ°€μ§€ 원칙

  • Fast (λΉ λ₯΄κ²Œ μ‹€ν–‰)
  • Isolated (λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ κ°€λŠ₯)
  • Repeatable (반볡 μ‹€ν–‰ κ°€λŠ₯)
  • Self-validating (κ²°κ³Όλ₯Ό 슀슀둜 검증 κ°€λŠ₯)
  • Timely (μ μ‹œμ— μž‘μ„±, μ½”λ“œ μž‘μ„± 전에 λ¨Όμ € ν…ŒμŠ€νŠΈ μž‘μ„±)

πŸ“Œ Testability

βœ… ν…ŒμŠ€νŠΈλ₯Ό μ–Όλ§ˆλ‚˜ 쉽고, 효과적으둜 μˆ˜ν–‰ν•  수 μžˆλŠ”μ§€ λ‚˜νƒ€λ‚΄λŠ” 정도
βœ… μ–Όλ§ˆλ‚˜ μ‰½κ²Œ μž…λ ₯을 λ³€κ²½(Controllability)ν•˜κ³ , 좜λ ₯을 검증(Observability)ν•  수 μžˆλŠ”κ°€?

DIP & DI

객체가 ν•˜μœ„ λͺ¨λ“ˆμ΄ μ•„λ‹Œ μΆ”μƒν™”λœ μƒμœ„ λͺ¨λ“ˆμ— μ˜μ‘΄ν•˜κ²Œ 함(DIP)으둜써 μ‰½κ²Œ μž…λ ₯(input)을 λ³€κ²½ν•  수 있게 ν•œλ‹€. ν…ŒμŠ€νŠΈ μ‹œ λŒ€μ—­μ„ 객체에 μ£Όμž…(DI)ν•΄ μ‰½κ²Œ 좜λ ₯(output)을 검증할 수 μžˆλ„λ‘ ν•œλ‹€.

μ΄λŠ” λ³€κ²½ 사항에 μœ μ—°ν•˜κ²Œ λŒ€μ‘ν•  수 μžˆλŠ” μ½”λ“œλ₯Ό μœ λ„ν•œλ‹€.

@Wonyu
Hello :) I'm Wonyu