-
Notifications
You must be signed in to change notification settings - Fork 1
π [3λΆ λ¦¬λ·°] TestβDriven Development : By Example
jiwon Han edited this page Jul 2, 2024
·
23 revisions
- ν μ€νΈλ μμ λ¨μλΆν° μμ§λ ₯μ λμ΄κ³ κ²°ν©λ ₯μ μ€μΈλ€λΌλ λ§μ μ μκ² κ³΅κ°νλ€. ν μ€νΈλ₯Ό μμ±νλ κ²μ λ΄κ° λ§λλ μ νμ λΆμνλ μΌκ³Ό λμΌνλ€λ λλμ λ°μλ€. μ νμ λ§λ λ€ ν΄μ 무μμ μ½λλΆν° μμ±νλ κ²μ΄ μλ κ³ κ°μ μꡬμ¬νμ 체ν¬νκ³ κ·Έμ λ°λ₯Έ κΈ°λ₯μ λμ΄νκ³ μ€λΉκ° λ ν κ°λ°μ μ°©μνλ κ²μ²λΌ, ν μ€νΈλ μ½λλ₯Ό μμ±νκΈ° μ μ΄λ€ κ²°κ³Όκ° λμμΌ νλμ§ μ΄λ»κ² λμν κ²μΈμ§λ₯Ό 미리 리μ€νΈμ ν ν μμ±νλ€. μ΄λ° μΌλ ¨μ κ³Όμ μ TDDλΌκ³ νλκ² μλκΉ? λΉλ¨ ν μ€νΈ μμ±λΏλ§ μλλΌ κ±°κΈ°μ λ°λΌ μ€λ λ€λ₯Έ λ€μν κ³Όμ λ€μμ μ£Όλ μ΄μ μ λ μ§μ€νλ κ² λ§λ λ― νλ€.
- λΉ¨κ° λ§λ ν¨ν΄μμ κ°μ₯ 곡κ°λ λΆλΆμ μ€ν¨ν ν μ€νΈλ₯Ό μκ² λΆν νκ³ κ·Έ μμΈμ νμ νλ κ³Όμ μ΄μλ€. νλ‘ νΈμλ κ°λ°μμ 볡μ‘ν μ»΄ν¬λνΈλ μν κ΄λ¦¬ μ½λλ₯Ό ν μ€νΈν λ μ΄λ° λ°©μμΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°νλ©΄ λλ²κΉ μ μμλλ μκ°μ ν¬κ² μ€μΌ μ μλ€. μ€ν¨ν ν μ€νΈλ₯Ό λλ €μνμ§ μλ λ§μΈλμ λν μκΈ°λ λμμ ν μ€νΈ λΏλ§ μλλΌ κ°λ° μ λ°μ μΈ λΆλΆμ λν λ§μΈλλ μ€μ μ λ λλμ΄μλ€.
- μ΄λ‘ λ§λ ν¨ν΄μ λ΄μ©μ ν μ€νΈλ₯Ό ν΅κ³Όμν€λ κ³Όμ μ΄ λ¨μν λλ²κΉ μ΄ μλ μ°½μμ μΈ ν΄κ²°μ± μ μ°Ύλ κ³Όμ μ΄λΌλ κ²μ μ€μ μ λ λ΄μ©μ΄μλ€.
- μ»΄ν¬λνΈ κ΅¬μ‘°λ₯Ό κ°μ νκ±°λ μν κ΄λ¦¬λ₯Ό μ΅μ νν λ μ΄λ¬ν ν¨ν΄μ μ μ©νλ©΄ μ½λμ κ°λ μ±κ³Ό μ¬μ¬μ©μ±μ΄ ν¬κ² ν₯μλλ€. λν, TDDλ₯Ό ν΅ν΄ κΉ¨λν μ½λλ₯Ό μμ±νλ κ³Όμ μμ ν μ€νΈ μΌμ΄μ€κ° μ€μν μν μ νλ€λ μ μ λ€μ κΉ¨λ¬μλ€. ν μ€νΈκ° μ½λ νμ§μ 보μ₯νκ³ , 리ν©ν λ§μ μλν λ λλ €μνμ§ μκ² λμμ£Όλ μ‘°λ ₯μμ μν μΈ λ― νλ€.
- 리ν©ν λ§ λ°©λ²μ λν΄μ μ€λͺ ν΄μ£Όλλ° κ·Έ μ€ 'μ°¨μ΄μ μΌμΉ μν€κΈ°'κ° λμ λμλ€. λ³΄ν΅ μμ μ ν λ λ°λ³΅μ μ€μ΄λ €κ³ λ§μ΄ λ Έλ ₯μ νλλ°, κ·Έ λ λ§μ λμμ΄ λ κ² κ°λ€. κ°μ κΈ°λ₯μ μΆμΆνκΈ° μν΄μ λΉμ·ν κΈ°λ₯μ μ μ§μ μΌλ‘ κ°κ² λ§λ€λ©΄μ μΆμΆν λΆλΆμ μ°Ύμκ°λ λ°©λ²μ΄ μΈμμ μ΄μλ€.
- λ§μ§λ§ μ₯μ TDD μ λ°μ λν μ‘°μΈκ³Ό μ°Έκ³ μ¬νμ΄ λ΄κ²¨μλ€. κ·Έ μ€ νλ‘μ νΈ λμ€μ TDDλ₯Ό μ μ©ν μ μλ? μ λν λ΅λ³μ΄ μλ€. λ§μ½ TDDλ₯Ό μ μ©νκΈ° μν΄ μ½λλ₯Ό μμ±νλ€κ° μ€λ₯κ° λλ€λ©΄ κ·Έκ²μ TDD λλ¬ΈμΈμ§ μλλ©΄ κ·Έλ₯ μ€λ₯ λλ¬ΈμΈμ§ μ μ μλ λ§μΉ λκ³Ό λ¬κ± λ¬Έμ μ²λΌ λΆμ΄λκΈ° λλ¬Έμ μ°μ μ λ²μλ₯Ό μ ννκ³ μ μ©ν΄λκ°λΌλ μ‘°μΈμ΄ μΈμ κΉμλ€.
- 25μ₯ ν μ€νΈ μ£Όλ κ°λ° ν¨ν΄ | ν μ€νΈ μ£Όλ κ°λ°μ μ νκΈ° μν κ°λ° ν¨ν΄μ΄ λ΄κ²¨μλ€. ν μ€νΈ λͺ©λ‘μμ μ΄λ€ ν μ€νΈλ₯Ό λ¨Όμ μμ±ν΄μΌνλμ§, ν μ€νΈλ₯Ό μμ±ν λ λ¨μΈμ κ°μ₯ λ¨Όμ μμ±νλ κ², ν μ€νΈ λ΄μ λ°μ΄ν°μ κ°λ μ±μ λμ΄λ κ² λ± μΈμΈν νλ€μ΄ λ΄κ²¨μμλ€.
- 26μ₯ λΉ¨κ° λ§λ ν¨ν΄ | νμ΅ ν μ€νΈ, νκ· ν μ€νΈ λ± ν μ€νΈλ₯Ό μ μ©ν λ§ν λ€μν μν©μ΄ μκ°λμλ€. κ·Έλ¬λ€ 26μ₯ λ§μ§λ§μ λ€λ€λΌμλ μμλ₯Ό μ’μ κ² μ°λΌλ λ΄μ©κΉμ§ λμλ€. μμμ ν μ€νΈ μ£Όλ κ°λ°μ μ νκΈ° μν κ°λ° ν¨ν΄μ λ§νλ€κ°, λκ° λ§μΈλμ λ±μ΄ μμ¬ λμ€λ λλ..π€
- 27μ₯ ν μ€ν ν¨ν΄ | λͺ¨μ(mock) κ°μ²΄, μ ν μ νΈ, ν¬λμ ν μ€νΈ λλ―Έ λ±λ± ν μ€νΈλ₯Ό μμ±ν λ μ¬μ©ν μ μλ μ½λ ν¨ν΄λΆν°, κ°μΈκ³Ό νμμ ν μ€νΈ μ½λλ₯Ό μμ±ν λ λ€μμ μν΄ μ΄λ€ μμΌλ‘ λ§λ¬΄λ¦¬νλμ§, λ μμ λ¨μλ‘ ν μ€νΈ μͺΌκ°κΈ° λ±μ κ°λ° νμμ λν ν¨ν΄κΉμ§. μ¬λ¬ μλ―Έμ ν¨ν΄λ€μ΄ λ΄κ²¨μλ€. μ μμ μ½λ ν¨ν΄λ€μ μ€μ λ‘ μ¬μ©ν΄λ³΄μκ±°λ, μ μ©νκ³ μ¬μ©ν μ μλ λ― ν΄μ μ’μλ€.
- 28μ₯ μ΄λ‘ λ§λ ν¨ν΄ | μ΄μ μ λ€λ₯Έ μ₯λ€μμ μμ μ ν¨κ» μ€κ° μ€κ° λ±μ₯νλ μΌκ°μΈ‘λ, κ°μ§λ‘ ꡬννκΈ°, λͺ λ°±ν ꡬννκΈ° λ±μ λ΄μ©μ λ€μ μ 리λμ΄μμ΄ λ³΅μ΅ν μ μμλ€. μΆκ°λ‘ λ³ν 격리νκΈ°μ λ΄μ©μ μ½μλλ°, λ³νκ° μμ λ κΈ°μ‘΄μ λ΄μ©κ³Ό λ³νν λ΄μ©μ λͺ¨λ λ¨κ²¨λλ λΆλΆλ μ κΈ°νλ€.
- 29μ₯ xUnit ν¨ν΄ | 2μ₯μμ λμλ xUnitμ ννλ₯Ό λλ ν μ€ν νλ μμν¬λ€μμ, μ€μ§μ μΌλ‘ μ½λλ₯Ό μμ±νλ ν¨ν΄μ λν΄ μκ°νλ€. μ½λ μμ±λ²μ κ°μ₯ κ°κΉμ΄ λ΄μ©μΈ κ² κ°λ€. ν μ€νΈμμ μ¬μ©νλ λ¨μΈ, ν½μ€μ², μμΈ ν μ€νΈμ, ν μ€νΈλ€μ νλλ‘ λ¬Άλ κ² λ±μ λν μκ°κ° λμλλ°, νμ¬ μ€λ¬΄μμ μ¬μ©νλ μ¬λ¬ ν μ€ν νλ μμν¬μμλ 곡ν΅μ μΌλ‘ νμΈν μ μμ΄ λ΄μ©μ μ΄ν΄νκΈ° μμνλ€.
- 30μ₯ λμμΈ ν¨ν΄ | λμμΈ ν¨ν΄μ μλ μ μ μ λ§λ³΄κΈ°λ‘ νμ΅ ν μ μ΄ μλλ°, λ무 μ΄λ‘ μ μ΄κ³ μ€μ§μ μΈ μμ λ₯Ό ν¨κ» μ νμ§ λͺ»ν΄μ λ무 μ΄λ €μ μλ€. TDD κ΄μ μμ ν μ€νΈλ₯Ό μμ±ν λμ 리ν©ν λ§ ν λ μ£Όλ‘ μ¬μ©νλ ν¨ν΄λ€μ΄ μκ°λμλλ°, μ΄λ ν λ§₯λ½μμ ν΄λΉ ν¨ν΄μ λμ ν΄μΌνλμ§ κ°λ΅ν μ€λͺ μ΄ μμ΄ μ 보λ€λ μ‘°κΈ λ μ΄ν΄ν μ μμλ κ² κ°λ€. μ¬μ ν μ λͺ¨λ₯΄κ² λ κ²λ μκ³ μ»΄ν¬μ§νΈλ ν©ν 리μ κ°μ΄ μ€λ¬΄μμλ λΉμ·ν μν©μ λ§μ£Όν΄μ μ‘°κΈμ΄λλ§ μ΅μν΄μ§ κ²λ€λ μλ€. λ§μ§λ§μ μ±κΈν€μ λν μ€λͺ μ΄ μ μΌ μ¬λ―Έμλ€. μ μλ³μλ₯Ό μ΄λ»κ² μ¨μΌν κΉ? μ°μ§ λ§λΌ. λ€μ νμ΄μ§κ° μλ μ€ μμλ€.π€£
- 31μ₯ 리ν©ν λ§ | TDDλ₯Ό νλ©° κΈ°λ₯λ€μ 리ν©ν λ§νλ ꡬ체μ μΈ λ°©λ²μ μλ €μ€λ€. TDD μν© λΏλ§ μλλΌ, μΌλ°μ μΈ νλ‘κ·Έλλ° κ³Όμ μ μ μ©λλ λ΄μ©κ°λ€. μ°¨μ΄μ μΌμΉμν€κΈ°, λ°μ΄ν° μ΄μ£Όμν€κΈ°, μΈν°νμ΄μ€ μΆμΆ λ± μλΉν ꡬ체μ μΈ μν©κ³Ό λ°©μμ μκ°νλλ°, κ²°κ΅ κ΄μ¬μ¬μ λΆλ¦¬λ₯Ό μ νκ³ μΆμν νλ κ³Όμ μΈ κ² κ°λ€. νμμ κ°λ°μ νλ©΄ μμ°μ€λ½κ² κ³ λ―Όνλ λΆλΆμ΄μ§λ§, μ΄λ κ² λ°©λ²μ μ΄λ¦μ λΆμ¬μ λμ΄ν κ²μ μ²μμ΄λΌ μ κΈ°νκΈ°λ νλ€.
- 32μ₯ TDD λ§μ€ν°νκΈ° | TDD λμ μ κ΄νμ¬ κ³ λ―Όν΄λ³΄μμΌ ν λ€μν μ§λ¬Έκ³Ό, μ μμ μκ°μ νμΈν μ μλ€. TDDλ₯Ό λμ νλ κ²μ΄ κ²½μ°μ λ°λΌμλ μ΅μ μ μ νμ΄ μλ μ μλ€λ κ², TDDμ νμ μ μΈ κ°λ°μ΄ μλλΌ λ€λ₯Έ κ°λ° λ°©λ²λ‘ λ€κ³Ό μ΅νν μ μλ λ°©λ² λ±, μμΌλ‘μ κ°λ°μ μμ΄μ TDDλ₯Ό μ νμ©νκΈ° μν΄ νμν μ§λ¬Έλ€λ‘ λ§λ¬΄λ¦¬νλ€.
-
ν
μ€νΈμ£Όλκ°λ° ν¨ν΄
TDDλ₯Ό μννλλ° νμν μ 보μ κ³Όμ μ΄ κΈλ‘ μμΈν μ°μ¬μμ΄μ μμ λ₯Ό ν΅ν΄ μ νλ κ²κ³Όλ λ λ€λ₯Έ λ°°μμ μ»μλ€. μλνλ ν μ€νΈμ μ€νΈλ μ€μ κ΄κ³λ₯Ό λ΄κ° κ°λ°ν λ λ§λλ μν©λ€μ λμ ν΄λ³΄λ TDDκ° μ κ°μ‘°λλμ§ μ κ² κ°μλ€. ν μ€νΈμ½λλ₯Ό μμ±νλ κ³Όμ μμ μ€λ λΆλ΄μ΄ μμλλ° μ΄ μ± μμ μ μν TDDμ μ리λ₯Ό μ μ©νλ€λ©΄ μ€νλ € ν μ€νΈμ½λκ° to-do list μν μ ν΄μ£Όμ΄ ν΄μΌν μΌμ λ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μκ³ , κ²°κ³Όμ μΌλ‘ μμ μ μμ±λλ μ¬λΌκ°κ² λ€λ μκ°μ΄ λ€μλ€. μ± μ μ½μμλ‘ TDDμ νμμ±μ΄ λ νμ€ν΄μ§κ³ μλ€ π -
λΉ¨κ°λ§λ ν¨ν΄
μ±μ₯νλ νλ‘κ·Έλ¨μ κ°λ°νκΈ° μν΄ λ°λ‘ μμ±ν μ μλ ν μ€νΈλΆν° μλ‘μ΄ λ¬΄μΈκ°λ₯Ό λ°°μΈ μ μλ ν μ€νΈκΉμ§ λ°μ μν€κΈ° / νλ²μ ν λ¬Έμ λ§ ν΄κ²°νκΈ°, κ·Έλ κ² ν μ μλ ν μ€νΈλ₯Ό μμ±νλ κ²μΌλ‘ μμνκΈ° / ν μ€νΈμ½λλ₯Ό ν΅ν΄ μ€λͺ μ΄ κ°λ₯νλλ‘ νκΈ° / μΈλΆ μννΈμ¨μ΄λ₯Ό ν μ€νΈμ½λλ‘ μνν΄λ³΄κΈ° / (νκ·ν μ€νΈλ₯Ό μμ±νλ©°π ) νκ·ν μ€νΈλ₯Ό λ§μ μ μλ λ°©λ² κ³ μν΄λ³΄κΈ° / μ§μ³€μλ ν΄μνκΈ° / λ€μ μλνκΈ° λ± ν μ€νΈμ½λλ₯Ό μμ±νλ μμ λ§λ€ μ΄λ»κ² μμν΄μΌν μ§ κ°μ΄λλ₯Ό λ°μ μ±ν°μλ€. -
ν
μ€ν
ν¨ν΄
κ°λ°μ νλ©° λ§μ£Όνλ μν© λ³ ν μ€νΈ μΌμ΄μ€λ₯Ό μμ±νλ λ°©λ²μ μ μν΄μ£Όλ ννΈμλ€. ν μ€νΈμ½λ μμλ₯Ό λ³Ό λ κ·Έ μμμ νΈμΆνλ ν¨μλ λ‘μ§μ μμκ° μ κ·Έλ κ² μμ±λμλμ§ μ΄ν΄λμλ€. μμ μ μ μ μ€λ¨ν λ μμ ν λλμ§ μμ μνλ‘ μ€λ¨νκ³ , μΆν λ€μ μμν λ λ 빨리 μμν μ μλλ‘ νλ 리차λ κ°λΈλ¦¬μμ νΈλ¦μ λμκ² λ§μ λμμ μ€ κ² κ°λ€. -
μ΄λ‘ λ§λ ν¨ν΄
λΉ¨κ°λ§λλ₯Ό κ°λ₯ν ν 빨리 μ κ±°νκΈ° μν΄ μ½λκ° ν μ€νΈλ₯Ό "ν΅κ³Ό"νκ² ν΄μ£Όλ ν¨ν΄λ€μ λν΄ μκ°λμ΄μλ€. κΉ¨λνκ³ λͺ λ°±ν μ½λλ₯Ό λ°λ‘ ꡬνν μ μλ λ°©λ²μ΄ μλ μ΄λ‘λ§λλ₯Ό μΌλ₯Έ λ§λ€μ΄λκ³ κ°λ°μ μ΄μ΄κ° μ μλ λ°©λ²μ λν λ΄μ©μ΄λΌμ μ²μλΆν° λͺ λ°±νκ³ κΉλν μ½λλ₯Ό μ§κΈ° μν΄ μκ°μ μκ³ , κ²°κ΅ κ·Έ λ°©λ²μ΄ μ¬λ°λ₯΄μ§ μμλ€λ κ²μ λ€λ¦κ² κΉ¨λ«λ μκ°λ€μ λμμ μ€ μ μμ κ²μ΄λΌκ³ μκ°νλ€. -
xUnit ν¨ν΄
xUnit νλ μμν¬μ ν¨κ» μ¬μ©ν μ μλ ν¨ν΄νλ ν μ€ν κΈ°λ²μ μ μν΄μ£Όκ³ μλ€. μ¬λ¬ ν μ€νΈμ κ±Έμ³ λμΌνκ² κ°μ²΄λ₯Ό μΈν νλ μ½λλ₯Ό ν½μ€μ³λΌκ³ λΆλ₯΄λ©° setup λ©μλλ΄μμ μ΄κΈ°νμμΌμ£Όλ κΈ°λ², ν μ€νΈ μ κ³Ό νμ μΈλΆ μΈκ³κ° λμΌνκ² μ μ§λκ² νκΈ° μν΄ ν μ€νΈ μ’ λ£ μμ μ tearDownμ΄ νΈμΆλλ€λ μ , ν μ€νΈ λ©μλ μμ± ν¨ν΄, μμΈν μ€νΈ λ°©λ²μ λν΄ μ μν΄μ€λ€. -
λμμΈ ν¨ν΄
μ¬λ¬ μ’ λ₯μ λμμΈ ν¨ν΄μ΄ TDD μνμ μ΄λ€ λ¨κ³μ μ¬μ©λλμ§ λΆλ₯λμ΄μλ€. λ§μ§λ§ νμ΄μ§μ μ±κΈν€ κΈ°λ²μ λν μ€λͺ μ κ°μ₯ 짧μμ§λ§ λ리μ λ°νλ€ π -
리ν©ν λ§
TDDλ₯Ό νλ©° 리ν©ν λ§μ νλ λ°©λ²λ€μ μ μν΄μ€λ€. ν μ€νΈμ½λκ° μ κ΅νκ² μμ±λμ΄μλ€λ©΄ κ±°μΉ¨μμ΄ λ¦¬ν©ν λ§μ ν μ μλ€λ κ²μ΄ TDDμ ν° μ₯μ μ΄λΌκ³ λ§ μκ°ν΄μμλ€. ν΄λΉ λ΄μ©μ μ½μΌλ 리ν©ν λ§μ μ§νν λ κ³ λ―Όν΄μΌν λ΄μ©κ³Ό μ¬λ¬ λ°©λ²λ€μ΄ μλ€λ κ²μ μ μ μμλ€. -
TDD λ§μ€ν°νκΈ°
TDDλ₯Ό 곡λΆνλ©° λ μ§ννλ©° μκΈ°λ μ¬λ¬κ°μ§ μλ¬Έμ λ€κ³Ό κ·Έμ λν λ΅λ³μ μ μν΄μ£Όλ©° μ΄ μ± μ μ£Όμ μΈ TDDμ λν΄ μ 리ν΄μ£Όλ ννΈμλ€. TDDλ λꡬλ₯Ό μν κ²μΈκ°? λΌλ μ§λ¬Έμ λν λ΄μ©μ΄ κ°μ₯ μΈμκΉμλ€. TDDκ° λͺ¨λ κ²μ ν΄κ²°ν΄μ£Όλ κ²λ μλκ³ λ€μ΄λ μκ³ μ λΉλ‘νμ¬ κ·Έλ§νΌμ κ²°ν¨μ ν΄κ²°ν΄μ£Όλ κ²λ μλμ§λ§ μ₯κΈ°μ μΈ κ΄μ μμ λ΄€μ λ κ°λ°μμ μμ λ¬Ό λͺ¨λμκ² κΈμ μ μΈ μν₯μ μ€ μ μλ νμμΌ κ²μ΄λΌλ λ΄μ©μ 곡κ°μ΄ λμλ€.