μ΄μ λ Έμ λΈλ‘κ·Έμ λ¨μ ν μ€νΈμ ν΅ν© ν μ€νΈ (2023.03.13)λ‘λΆν° λ§μ΄κ·Έλ μ΄μ λ κΈμ λλ€.
λ¨μ ν μ€νΈ vs ν΅ν© ν μ€νΈ
λ¨μ ν μ€νΈ(Unit Test)λ νλμ λͺ¨λμ κΈ°μ€μΌλ‘ λ 립μ μΌλ‘ μ§νλλ κ°μ₯ μμ λ¨μμ ν μ€νΈμ΄λ€. μ¬κΈ°μ λͺ¨λμ μ ν리μΌμ΄μ μμ μλνλ νλμ κΈ°λ₯ λλ λ©μλλ‘ μ΄ν΄ν μ μλ€. μλ₯Ό λ€μ΄ μΉμμ λ‘κ·ΈμΈ λ©μλμ λν λ 립μ μΈ ν μ€νΈκ° 1κ°μ λ¨μν μ€νΈκ° λ μ μλ€.
μ¦, λ¨μ ν μ€νΈλ “μ΄λ€ κΈ°λ₯μ΄ μ€νλλ©΄ μ΄λ€ κ²°κ³Όκ° λμ¨λ€" μ λλ‘ ν μ€νΈλ₯Ό μ§ννλ€.
ν΅ν© ν μ€νΈ(Integration Test)λ λͺ¨λμ ν΅ν©νλ κ³Όμ μμ λͺ¨λ κ°μ νΈνμ±μ νμΈνκΈ° μν΄ μνλλ ν μ€νΈμ΄λ€. μΌλ°μ μΌλ‘ μ ν리μΌμ΄μ μ μ¬λ¬ κ°μ λͺ¨λλ€λ‘ ꡬμ±μ΄ λκ³ , λͺ¨λλ€λΌλ¦¬ μνΈμμ©νλ€. κ·Έλ κΈ°μ ν΅ν©λ λͺ¨λλ€μ΄ μ¬λ°λ₯΄κ² μ°κ³λμ΄ λμνλμ§ κ²μ¦μ΄ νμνλ°, μ΄λ¬ν λͺ©μ μΌλ‘ μ§νλλ ν μ€νΈκ° ν΅ν© ν μ€νΈμ΄λ€.
λ¨μ ν μ€νΈ μμ±μ νμμ±
λ¨μ ν μ€νΈ μμ±μ νμμ±
ν΅ν© ν μ€νΈλ μ€μ μ¬λ¬ μ»΄ν¬λνΈλ€ κ°μ μνΈμμ©μ ν μ€νΈνκΈ° λλ¬Έμ μ»΄ν¬λνΈλ€μ΄ ꡬλλ μνμμ ν μ€νΈλ₯Ό νκ² λλ€. κ·Έλ κΈ°μ ν΅ν© ν μ€νΈλ₯Ό μν΄μλ μΊμλ DB λ±μ΄ μ€μ μ°κ²°μ ν΄μΌνκ³ , μμ€ν μ ꡬμ±νλ μ»΄ν¬λνΈλ€μ΄ λ§μμ§μλ‘ ν μ€νΈλ₯Ό μν λΉμ©μ΄ μλΉν 컀μ§λ€. λ°λ©΄ λ¨μ ν μ€νΈλ ν΄λΉ λΆλΆλ§ λ λ¦μ μΌλ‘ ν μ€νΈνκΈ° λλ¬Έμ λΉ λ₯΄κ² λ¬Έμ μ¬λΆλ₯Ό νμΈν μ μλ€.
- ν μ€ν μ λν μκ°κ³Ό λΉμ©μ μ κ°
- μλ‘μ΄ κΈ°λ₯ μΆκ° μμ μμλ‘ λΉ λ₯΄κ² ν μ€νΈ κ°λ₯
- 리ν©ν λ§ μμ μμ μ± ν보
- μ½λμ λν λ¬Έμλ‘μ μ¬μ©
κ·Έλ κΈ° λλ¬Έμ μ€λ¬΄μμλ λ¨μ ν μ€νΈλ₯Ό μ νΈνλ©°, TDDμμ μ κΈ°νλ ν μ€νΈλ λ¨μ ν μ€νΈλ₯Ό μλ―Ένλ€. μ°λ¦¬λ μ°λ¦¬κ° μμ±ν ν μ€νΈ μ½λλ₯Ό μμλ‘ λΉ λ₯΄κ² λ리면μ λ¬Έμ λ₯Ό νμ ν μ μλ€.
λ¨μ ν μ€νΈμ λ¬Έμ μ κ³Ό Stub
μ΄λ€ κ°μ²΄κ° μ체μ μΌλ‘ λͺ¨λ μΌμ μ²λ¦¬νλ€λ©΄ λ¬Έμ κ° μκ² μ§λ§, μΌλ°μ μΈ μ ν리μΌμ΄μ μμλ 1κ°μ κΈ°λ₯μ μ²λ¦¬νκΈ° μν΄ λ€λ₯Έ κ°μ²΄λ€κ³Ό μνΈμμ©ν΄μΌ νλ€. κ·Έλ κΈ° λλ¬Έμ λ€λ₯Έ κ°μ²΄ λμ κ°μ§ κ°μ²΄(Mock Object)λ₯Ό μ£Όμ νμ¬ μ΄λ€ κ²°κ³Όλ₯Ό λ°ννλΌκ³ μ ν΄μ§ λ΅λ³μ μ€λΉμμΌμΌ νλλ°, μ΄λ₯Ό stubμ΄λΌκ³ νλ€.
μλ₯Ό λ€μ΄ DBμ μλ‘μ΄ λ°μ΄ν°λ₯Ό μΆκ°νλ μ½λλ₯Ό ν μ€νΈνλ€κ³ νλ©΄, Mock DBλ₯Ό μ£Όμ νμ¬ insert μ²λ¦¬ μμ λ°λμ 1λ₯Ό λ°ννλλ‘ ν΄μ£Όλ κ²μ΄ stubμ΄λ€.
μ’μ λ¨μ ν μ€νΈμ νΉμ§
μꡬμ¬νμ κ³μ λ³νκ³ , κ·Έμ λ§μΆ° μ½λ μμ λ³ν΄μΌ νλ€. νμ§λ§ μ€μ μ½λλ₯Ό λ³κ²½νλ€λ κ²μ μ μ¬μ μΈ λ²κ·Έκ° λ°μν μ μμμ λ΄ν¬νλλ°, μ’μ ν μ€νΈ μ½λκ° μλ€λ©΄ λ³κ²½λ μ½λλ₯Ό κ²μ¦ν¨μΌλ‘μ¨ ν΄κ²°ν μ μλ€. λν μ€μ μ½λκ° λ³κ²½λλ©΄ ν μ€νΈ μ½λ μμ λ³κ²½μ΄ νμν μ μλλ°, μ΄λ¬ν μ΄μ λ‘ ν μ€νΈ μ½λ μμ κ°λ μ±μκ² μμ±ν νμκ° μλ€.
κ·Έλ κΈ°μ λ€μμ μ€μν΄μ ν μ€νΈ μ½λλ₯Ό μμ±νλ κ²μ΄ μ’λ€.
- 1κ°μ ν μ€νΈ ν¨μμ λν΄ assertλ₯Ό μ΅μννλΌ
- 1κ°μ ν μ€νΈ ν¨μλ 1κ°μ§ κ°λ λ§μ ν μ€νΈνλΌ
λν μ’κ³ κΉ¨λν ν μ€νΈ μ½λλ FIRST κ·μΉμ λ°λΌμΌ νλ€.
- Fast: ν μ€νΈλ λΉ λ₯΄κ² λμνμ¬ μμ£Ό λ릴 μ μμ΄μΌ νλ€.
- Independent: κ°κ°μ ν μ€νΈλ λ 립μ μ΄λ©° μλ‘ μμ‘΄ν΄μλ μλλ€.
- Repeatable: μ΄λ νκ²½μμλ λ°λ³΅ κ°λ₯ν΄μΌ νλ€.
- Self-Validating: ν μ€νΈλ μ±κ³΅ λλ μ€ν¨λ‘ κ²°κ³Όλ₯Ό λμΆνκ³ μ체μ μΌλ‘ κ²μ¦λμ΄μΌ νλ€.
- Timely: ν μ€νΈνλ €λ μ€μ μ½λλ₯Ό ꡬννκΈ° μ§μ μ ν μ€νΈ μ½λλ₯Ό ꡬνν΄μΌ νλ€.
λ¨μ ν μ€νΈλΌλ μ΄λ¦ μλμ Springμ λͺ¨λ λΉμ λμμ, μμ±ν ν μ€νΈλ₯Ό μ€ννλλ°λ§ λͺ λΆμ μκ°μ΄ μμλλ λͺ¨μ΅μ λ³Ό μ μμλ€. μ΄λ κ² μ€λ μκ°μ΄ 걸리λ ν μ€νΈλ λ¨μ ν μ€νΈμ μ₯μ μ΄ μμ΄μ§ κ²μ΄λ λ§μ°¬κ°μ§λ€.