관리 메뉴

λͺ©λ‘πŸ”– Test Driven Development (3)

deVlog

[TDD] ν…ŒμŠ€νŠΈ μ½”λ“œμ™€ μœ μ§€λ³΄μˆ˜

λͺ©μ°¨ πŸ€¨ ν…ŒμŠ€νŠΈ μ½”λ“œμ™€ μœ μ§€λ³΄μˆ˜λΉ λ₯Έ μ„œλΉ„μŠ€ μΆœμ‹œλ₯Ό μœ„ν•΄ CI(지속적인 톡합)와 CD(지속적 전달 λ˜λŠ” 지속적 배포)λ₯Ό λ„μž…ν•˜λŠ” 곳이 μ¦κ°€ν•˜κ³  μžˆλ‹€.TDDλ₯Ό ν•˜λŠ” κ³Όμ •μ—μ„œ μž‘μ„±ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” CI/CDμ—μ„œ μžλ™ν™” ν…ŒμŠ€νŠΈλ‘œ μ‚¬μš©λ˜μ–΄ 버그가 λ°°ν¬λ˜λŠ” 것을 막아쀀닀. ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” μ œν’ˆ μ½”λ“œμ™€ λ™μΌν•˜κ²Œ μœ μ§€λ³΄μˆ˜ λŒ€μƒμ΄ λœλ‹€.κΉ¨μ§€λŠ” ν…ŒμŠ€νŠΈλ₯Ό λ°©μΉ˜ν•˜λŠ” 상황이 κΈΈμ–΄μ§€λ©΄ μ•„λž˜μ™€ 같은 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.μ‹€νŒ¨ν•œ ν…ŒμŠ€νŠΈμ— λŒ€ν•΄ 무감각해진닀. ν…ŒμŠ€νŠΈ μ‹€νŒ¨ 여뢀와 상광 없이 λΉŒλ“œ/배포가 μ΄λ£¨μ–΄μ§€κ²Œ λœλ‹€.λΉŒλ“œλ₯Ό ν†΅κ³Όμ‹œν‚€κΈ° μœ„ν•΄ μ‹€νŒ¨ν•œ ν…ŒμŠ€νŠΈλ₯Ό 주석 μ²˜λ¦¬ν•˜κ³  μ‹€νŒ¨ν•œ ν…ŒμŠ€νŠΈλŠ” κ³ μΉ˜μ§€ μ•ŠλŠ”λ‹€.μœ„μ™€ 같은 상황이 λ°œμƒν•˜λ©΄ ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” κ°€μΉ˜λ₯Ό μžƒκΈ° μ‹œμž‘ν•œλ‹€.μ½”λ“œλ₯Ό λ³€κ²½ν–ˆμ„ λ•Œ κΈ°μ‘΄ κΈ°λŠ₯이 μ˜¬λ°”λ₯΄κ²Œ λ™μž‘ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” νšŒκ·€ ν…ŒμŠ€νŠΈ..

[TDD] ν…ŒμŠ€νŠΈ λ²”μœ„μ™€ μ’…λ₯˜

λͺ©μ°¨  ν…ŒμŠ€νŠΈμ˜ λ²”μœ„λŠ” ν…ŒμŠ€νŠΈμ˜ λͺ©μ κ³Ό μˆ˜ν–‰ν•˜λŠ” μ‚¬λžŒμ— 따라 달라진닀.ν…ŒμŠ€νŠΈ λ²”μœ„μ— λ”°λ₯Έ ν…ŒμŠ€νŠΈ μ’…λ₯˜λŠ” μ•„λž˜μ™€ 같이 μ„Έ κ°€μ§€λ‘œ λ‚˜λˆ λ³Ό 수 μžˆλ‹€.λ‹¨μœ„ ν…ŒμŠ€νŠΈν†΅ν•© ν…ŒμŠ€νŠΈκΈ°λŠ₯ ν…ŒμŠ€νŠΈ πŸ—ΊοΈ κΈ°λŠ₯ ν…ŒμŠ€νŠΈμ™€ E2E ν…ŒμŠ€νŠΈμ‚¬μš©μž μž…μž₯μ—μ„œ μ‹œμŠ€ν…œμ΄ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯이 μ˜¬λ°”λ₯΄κ²Œ λ™μž‘ν•˜λŠ”μ§€ ν™•μΈν•œλ‹€.ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ‹œμŠ€ν…œμ„ κ΅¬λ™ν•˜κ³  μ‚¬μš©ν•˜λŠ”λ° ν•„μš”ν•œ λͺ¨λ“  ꡬ성 μš”μ†Œκ°€ ν•„μš”ν•˜λ‹€.예1) νšŒμ› κ°€μž… κΈ°λŠ₯이 μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜λ €λ©΄ μ›Ή μ„œλ²„, λ°μ΄ν„°λ² μ΄μŠ€, μ›Ή λΈŒλΌμš°μ €κ°€ ν•„μš”ν•˜λ‹€.예2) νšŒμ› κ°€μž… κ³Όμ •μ—μ„œ 문자 λ°œμ†‘ κΈ°λŠ₯이 ν•„μš”ν•˜λ‹€λ©΄ μ™ΈλΆ€μ˜ 문자 λ°œμ†‘ μ„œλΉ„μŠ€λ„ ν•„μš”ν•˜λ‹€.끝(λΈŒλΌμš°μ €)μ—μ„œ 끝(DB)κΉŒμ§€ μ˜¬λ°”λ₯Έμ§€ κ²€μ‚¬ν•˜κΈ° λ•Œλ¬Έμ— E2E(End to end) ν…ŒμŠ€νŠΈλΌκ³ λ„ ν•œλ‹€.QA μ‘°μ§μ—μ„œ 주둜 κΈ°λŠ₯ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•œλ‹€...

[TDD] ν…ŒμŠ€νŠΈ 더블 - Mock vs Stub vs Spy

λͺ©μ°¨  πŸ§‘‍🀝‍πŸ§‘ ν…ŒμŠ€νŠΈ 더블https://martinfowler.com/bliki/TestDouble.htmlν…ŒμŠ€νŠΈ 더블은 μ†Œν”„νŠΈμ›¨μ–΄ ν…ŒμŠ€νŠΈμ—μ„œ μ‹€μ œ 객체λ₯Ό λŒ€μ‹ ν•˜μ—¬ μ‚¬μš©λ˜λŠ” κ°€μ§œ 객체 λ“€λ‘œ, ν…ŒμŠ€νŠΈ ν™˜κ²½μ—μ„œ λ‹€μ–‘ν•œ λͺ©μ μ„ μœ„ν•΄ ν™œμš©λœλ‹€.λ§ˆν‹΄ νŒŒμšΈλŸ¬λŠ” μœ„μ˜ κ²Œμ‹œκΈ€μ—μ„œ ν…ŒμŠ€νŠΈ 더블을 λ‹€μ„― κ°€μ§€λ‘œ λΆ„λ₯˜ν–ˆλ‹€.Dummy : κ°μ²΄λŠ” μ „λ‹¬λ˜μ§€λ§Œ μ‹€μ œλ‘œ μ‚¬μš©λ˜μ§€ μ•ŠλŠ”λ‹€. 일반적으둜 νŒŒλΌλ―Έν„°λ₯Ό μ „λ‹¬ν•˜κΈ° μœ„ν•œ μš©λ„λ‘œλ§Œ μ‚¬μš©λœλ‹€.Fake : μ‹€μ œλ‘œ λ™μž‘ν•˜λŠ” 객체λ₯Ό μ˜λ―Έν•œλ‹€. 보톡 ν”„λ‘œλ•μ…˜μ— ν™˜κ²½μ— μ ν•©ν•˜μ§€ μ•Šμ€ 지름길 역할을 ν•œλ‹€. (인메λͺ¨λ¦¬ λ°μ΄ν„°λ² μ΄μŠ€ κ°€ 쒋은 μ˜ˆμ‹œμ΄λ‹€).Stub : ν…ŒμŠ€νŠΈ 쀑에 호좜된 κ²½μš°μ— λŒ€ν•΄ 미리 μ •ν•΄μ§„ 값을 μ‘λ‹΅ν•œλ‹€. 보톡 ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ λ§Œλ“€μ–΄μ§€λ©° ν…ŒμŠ€νŠΈ 이외에 μ‚¬μš©λ˜μ§€ μ•ŠλŠ”λ‹€.Spy..