λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ”­Computer ScienceπŸ”­/개발 상식

[λ‹¨μœ„ν…ŒμŠ€νŠΈ] λ‹¨μœ„ν…ŒμŠ€νŠΈμ— λŒ€ν•΄ μ•Œμ•„λ³΄μž

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

- λ‹¨μœ„ν…ŒμŠ€νŠΈλž€ 'ν•˜λ‚˜μ˜ κΈ°λŠ₯ λ˜λŠ” λ©”μ„œλ“œλ₯Ό κΈ°μ€€μœΌλ‘œ λ…λ¦½μ μœΌλ‘œ μ§„ν–‰λ˜λŠ” κ°€μž₯ μž‘μ€ λ‹¨μœ„μ˜ ν…ŒμŠ€νŠΈ'

- ν•œ λ‹¨μœ„μ˜ κΈ°λŠ₯이 μ˜¬λ°”λ₯΄κ²Œ λ™μž‘ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈν•˜λ©° 어떀값이 μ£Όμ–΄μ‘Œμ„ λ•Œ μ˜ˆμƒκ²°κ³Όκ°€ λ‚˜μ˜€λ„λ‘ ν•˜μ—¬ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•œλ‹€.

 

vs. ν†΅ν•©ν…ŒμŠ€νŠΈ

ν†΅ν•©ν…ŒμŠ€νŠΈλŠ” λͺ¨λ“ˆκ°„μ˜ ν˜Έν™˜μ„±μ„ ν™•μΈν•˜κ³  λͺ¨λ“ˆμ„ ν†΅ν•©ν•˜λŠ” κ³Όμ •μ—μ„œ μˆ˜ν–‰ν•˜λŠ” ν…ŒμŠ€νŠΈμ΄λ‹€. λ§Žμ€ λͺ¨λ“ˆλ“€μ΄ λ§žλ¬Όλ €μ„œ μ„œλ‘œμ—κ²Œ λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›μœΌλ©° λ™μž‘ν•˜λ―€λ‘œ λͺ¨λ“ˆλ“€μ˜ 연계가 정상적인지 κ²€μ¦ν•˜λŠ” 과정이 ν•„μš”ν•˜λ‹€. κ·ΈλŸ¬λ―€λ‘œ ν΄λΌμ΄μ–ΈνŠΈκ°€ APIν˜ΈμΆœν•  λ•Œ λΆ€ν„° μ‘λ‹΅κΉŒμ§€ μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈ ν•˜λŠ” 것이닀.

 

κ·Έλ ‡λ‹€λ©΄ κ·Έλƒ₯ λͺ¨λ“ˆλ“€μ΄ λͺ¨λ‘ μ—°κ³„λœ μ™„μ „ν•œ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•˜μ§€ μ•Šκ³  λ‹¨μœ„ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ?

 

λͺ¨λ“ˆλ“€μ΄ μ—°κ³„λœ 톡합 ν…ŒμŠ€νŠΈλ₯Ό ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€λ₯Έ μ„œλΉ„μŠ€λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€ 등에 μ‹€μ œ 연결을 ν•΄μ•Όν•˜κ³  μ΄λŠ” ν…ŒμŠ€νŠΈ μ‹œκ°„μ— μ¦κ°€λ‘œ 이어진닀. λ˜ν•œ λ‚΄κ°€ ν…ŒμŠ€νŠΈν•˜κ³  싢은 λͺ¨λ“ˆμ΄μ™Έμ˜ λ‹€λ₯Έ λͺ¨λ“ˆμ— μ˜ν•΄ ν…ŒμŠ€νŠΈ κ²°κ³Όκ°€ 영ν–₯을 받을 수 μžˆλ‹€.

  • λ‹¨μœ„ν…ŒμŠ€νŠΈλ‘œ μ–»λŠ” 이점듀
    • μ›ν•˜λŠ” λΆ€λΆ„λ§Œ λ…λ¦½μ μœΌλ‘œ ν…ŒμŠ€νŠΈν•  수 μžˆλ‹€.
    • μ½”λ“œ λ¦¬νŒ©ν† λ§ μ‹œ λ³€κ²½μœΌλ‘œ 인해 였λ₯˜κ°€ λ°œμƒν•  수 μžˆλŠ” 지 λ‹¨μœ„ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•΄μ„œ λ°”λ‘œ 확인할 수 μžˆλ‹€.
    • ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό μž‘μ„±ν•¨μœΌλ‘œμ¨ λ¬Έμ„œν™”κ°€ 될 수 μžˆλ‹€.

변경이 λ°œμƒν–ˆμ„ λ•Œ μš°λ¦¬λŠ” μž‘μ„±λœ ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œ 변경에 μ˜ν•œ 영ν–₯을 νŒŒμ•…ν•  수 있고 λ˜‘κ°™μ€ 상황을 νž˜λ“€μ΄μ§€ μ•Šκ³  μž¬ν˜„ν•΄λ‚Ό 수 μžˆλ‹€.

 

λ‹¨μœ„ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ stubμ‚¬μš©

ν˜„μž¬ ν…ŒμŠ€νŠΈν•˜λ €λŠ” λͺ¨λ“ˆμ΄ λ‹€λ₯Έ λͺ¨λ“ˆμ˜ μ„œλΉ„μŠ€λ₯Ό ν•„μš”λ‘œ ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ 이 λͺ¨λ“ˆμ—λ§Œ 독립적인 ν…ŒμŠ€νŠΈλ₯Ό ꡬ성할 수 μžˆμ„κΉŒ?

 

μš°λ¦¬λŠ” 이 문제λ₯Ό μ‹€μ œ μ„œλΉ„μŠ€ 객체 λŒ€μ‹  'κ°€μ§œ 객체'λ₯Ό μ£Όμž…ν•˜μ—¬ ν•΄κ²°ν•œλ‹€. 'κ°€μ§œκ°μ²΄'(Mock)λŠ” μš”μ²­ μ‹œμ— μš°λ¦¬κ°€ 미리 μ •μ˜ν•΄ λ‘” λ°˜ν™˜κ°’μ„ λ°˜ν™˜ν•œλ‹€. (stub)

μ΄λ ‡κ²Œ 되면 μš°λ¦¬λŠ” λ‹€λ₯Έ λͺ¨λ“ˆμ— 영ν–₯을 받지도 μ•Šκ³  주지도 μ•ŠμœΌλ©΄μ„œ ν˜„μž¬ ν…ŒμŠ€νŠΈν•˜λ €λŠ” κΈ°λŠ₯에 μ§‘μ€‘ν•΄μ„œ 검증을 진행할 수 μžˆλ‹€.

 

μš”κ΅¬μ‚¬ν•­μ΄ λ³€ν•˜λ©΄ μ½”λ“œκ°€ λ³€κ²½λ˜κ³  λ³€κ²½λœ μ½”λ“œλ‘œ 인해 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆλ‹€. ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” λ³€κ²½λœ μ½”λ“œλ₯Ό 검증할 쒋은 방법이닀. ν•˜μ§€λ§Œ μ½”λ“œκ°€ λ³€κ²½λ˜λ©΄ ν…ŒμŠ€νŠΈ μ½”λ“œλ„ 변경될 수 μžˆλ‹€.

κ·ΈλŸ¬λ―€λ‘œ ν…ŒμŠ€νŠΈ μ½”λ“œλ„ κ°€λ…μ„±μžˆκ²Œ μ§œλŠ” 것이 μ’‹λ‹€. ν…ŒμŠ€νŠΈν•¨μˆ˜λŠ” 1가지 κ°œλ…κ³Ό assert만 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

 

κ°œλ°œμ„ ν•˜λ‹€λ³΄λ©΄ 반볡적으둜 λ˜‘κ°™μ€ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•΄μ•Όν•˜λŠ” κ²½μš°κ°€ 생긴닀. 이 λ•Œ 직접 λ˜‘κ°™μ€ 상황을 λ§Œλ“€μ–΄μ„œ ν…ŒμŠ€νŠΈ ν•˜λŠ” 것이 μ•„λ‹ˆλΌ ν•œλ²ˆ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ œλŒ€λ‘œ μž‘μ„±ν•˜λ©΄ 반볡적으둜 λ˜‘κ°™μ€ 상황에 λŒ€ν•΄ ν…ŒμŠ€νŠΈλ₯Ό λΉ λ₯΄κ²Œ μˆ˜ν–‰ν•  수 μžˆλ‹€.