π 1. TDDλ 무μμΈκ°?

TDD(Test-Driven Development, ν
μ€νΈ μ£Όλ κ°λ°)λ
κΈ°λ₯μ ꡬννκΈ° μ μ ν
μ€νΈλ₯Ό λ¨Όμ μμ±νκ³ ,
κ·Έ ν
μ€νΈλ₯Ό ν΅κ³Όνλ μ½λλ₯Ό λ§λ λ€ λ¦¬ν©ν°λ§νλ κ°λ° λ°©μμ
λλ€.
νλ§λλ‘, ν μ€νΈκ° κ°λ°μ μ΄λλ λ°©μμ΄λΌκ³ λ³Ό μ μμ΅λλ€. π
π 2. TDD ν΅μ¬ μ¬μ΄ν΄ (Red → Green → Refactor)
- π΄ Red – μ€ν¨νλ ν
μ€νΈ μμ±
κΈ°λ₯μ ꡬννκΈ° μ μ μ€ν¨ν μλ°μ μλ ν μ€νΈ μμ±
→ μ€ννμ¬ ν μ€νΈκ° μ€ν¨νλμ§ νμΈ - π’ Green – ν
μ€νΈλ₯Ό ν΅κ³Όνλ μ΅μνμ μ½λ μμ±
κ°μ₯ λ¨μνκ² ν μ€νΈλ₯Ό ν΅κ³Όμν€λ μ½λ ꡬν
→ μ°μ μ “ν΅κ³Ό”κ° λͺ©ν - β» Refactor – μ½λ κ°μ
μ€λ³΅ μ κ±°, κ°λ μ± ν₯μ, ꡬ쑰 κ°μ
→ 리ν©ν°λ§ νμλ ν μ€νΈλ λͺ¨λ ν΅κ³Όν΄μΌ ν¨
π₯ 3. Python μμ (pytest κΈ°λ°)
3.1 π΄ μ€ν¨νλ ν μ€νΈ μμ±
μμ§ add() ν¨μλ₯Ό λ§λ€μ§ μμ μνμμ ν μ€νΈλ₯Ό μμ±ν©λλ€.
# test_calculator.py
from calculator import add
def test_add():
assert add(2, 3) == 5
μ€ν:
pytest
# κ²°κ³Ό: Failed β (μμλλ‘ μ€ν¨)
3.2 π’ μ΅μνμ μ½λ μμ±
ν μ€νΈλ₯Ό ν΅κ³Όμν€κΈ° μν΄ κ°μ₯ κ°λ¨ν μ½λλ₯Ό μμ±ν©λλ€.
# calculator.py
def add(a, b):
return a + b
μ€ν:
pytest
# κ²°κ³Ό: Passed β
3.3 ⻠리ν©ν°λ§
νμνλ€λ©΄ μ€λ³΅ μ κ±°, λ€μ΄λ° κ°μ , κΈ°λ₯ νμ₯ λ±μ μ§νν©λλ€.
# calculator.py (μΆκ° κΈ°λ₯)
def subtract(a, b):
return a - b
# test_calculator.py
from calculator import add, subtract
def test_add():
assert add(2, 3) == 5
def test_subtract():
assert subtract(5, 3) == 2
π 4. Djangoμμμ TDD μμ
Djangoμμλ TestCaseλ‘ λ·°/λͺ¨λΈ ν μ€νΈλ₯Ό μμ±ν λ€ κ΅¬νμ μ§νν©λλ€.
# blog/tests.py
from django.test import TestCase
from django.urls import reverse
class PostViewTest(TestCase):
def test_post_list_page(self):
response = self.client.get(reverse("blog:list"))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "λΈλ‘κ·Έ κΈ λͺ©λ‘")
β 5. TDD μ₯μ
- π κΈ°λ₯ μꡬμ¬νμ΄ λͺ νν΄μ§
- π λ²κ·Έλ₯Ό μ‘°κΈ°μ λ°κ²¬ κ°λ₯
- π‘ 리ν©ν°λ§ μ μμ μ± λ³΄μ₯
- π‘ μ μ§λ³΄μ ν¨μ¨ μμΉ
β οΈ 6. TDD λ¨μ
- β³ μ΄κΈ° κ°λ° μλκ° λλ €μ§ μ μμ
- π§© ν μ€νΈ μμ±μ μ΅μν΄μ ΈμΌ ν¨
- π μꡬμ¬ν λ³ν μ ν μ€νΈ μ½λλ ν¨κ» μμ νμ
π 7. λ§λ¬΄λ¦¬
TDDλ λ¨μν κΈ°μ μ΄ μλλΌ κ°λ° λ¬Ένμ
λλ€.
μ²μμλ λ²κ±°λ‘μ§λ§, νλ‘μ νΈκ° 컀μ§μλ‘ μμ μ±κ³Ό μμ°μ±μ λμ¬μ€λλ€.
ν λ² μ΅κ΄μ΄ λλ©΄, ν
μ€νΈ μμ΄ κ°λ°νλ κ² λΆμν΄μ§ μ λκ° λ©λλ€. π