TDD
TDD๋?
Test-Driven-Development(ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ)๋ก ๊ฐ๋ฐ(์ฝ๋ ์์ฑ)์ ์ ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ์ฌ ํ ์คํธ๊ฐ ๊ฐ๋ฐ์ ์ด๋์ด ๋๊ฐ๋๋ก ํ๋ ๋ฐฉ์
"ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๋, ์ฆ ๊ตฌํ๋ณด๋ค ์ธํฐํ์ด์ค์ ์คํ์ ๋จผ์ ์ ์ํจ์ผ๋ก์จ ๊ฐ๋ฐ์ ์งํํ๋ ๋ฐฉ์์ด๋ค."
TDD ์์
Red(์คํจ) โ Green(์ฑ๊ณต) โ Refactoring(๋ฆฌํฉํ ๋ง) ๊ณผ์ ์ ๋ฐ๋ณตํ๋ ์ฌ์ดํด์ ๊ฐ๋๋ค.
๊ธฐ๋ฅ ์๊ตฌ์ฌํญ์ ๋ฐํ์ผ๋ก ํ ์คํธ ์ฝ๋ ์์ฑ
ํ ์คํธ ์ฝ๋ ์คํ (Fail) โ ์์ง ๊ตฌํ์ฒด๊ฐ ์์ผ๋ฏ๋ก ๋น์ฐํ ์คํจ
์์ฑ๋ ํ ์คํธ๊ฐ ํต๊ณผํ ์ ์๋๋ก ๊ฐ๋จํ ์ํ ์ฝ๋ ์์ฑ
ํ ์คํธ ์ฝ๋ ์คํ (Success)
3, 4๋ฒ ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ์ฝ๋๋ฅผ ๊ฐ๋ฐ
์์ฑํ ํ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์์ ํ๊ฒ ๋ฆฌํฉํ ๋ง
์์ ๋จ๊ณ๋ฅผ ์ฐพ๊ณ , ์ฝ๋์์ ํผ๋๋ฐฑ์ ์ป๋๊ฒ ์ค์ํ๋ค. 3๋ฒ์ด ์ด๋ ต๋ค๋ฉด 1๋ฒ์ผ๋ก ๋์๊ฐ์ ๋ ์๊ณ ์ฌ์ด ๋ฌธ์ ๋ฅผ ์ ์ํ๊ณ , 6๋ฒ์ ์ํด ์๋๋ฅผ ๋๋ฌ๋ด๊ณ ์ค๋ณต์ ์ฐพ์ ์ ๊ฑฐํ๋ ์ฐ์ต์ ํด์ผ ํ๋ค. ์ด ๋์ ์ตํ์ง ์์ผ๋ฉด TDD๋ฅผ ํ๋๊ฒ ๊ฑฐ์ ๋ถ๊ฐ๋ฅ,
TDD ์์น
์คํจํ๋ ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ๋ผ โ ์ฆ, ๋ฏธ๋ฆฌ ๊ตฌํํ์ง๋ง๊ณ ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑ(์๊ตฌ์ฌํญ ๋ถ์)ํ ํ์ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํ๋ค.
ํ ์คํธ๋ฅผ ํต๊ณผํ๊ธฐ ์ํด ํ์ํ ๋งํผ์ ์ฝ๋๋ง ์์ฑํ๋ผ โ ๋ฏธ๋์ ํ์ํ ๊ฒ ๊ฐ์ ๊ตฌํ์ ์ง๋ ์ง์ํ์ฌ ๋ถํ์ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ค๋ฒ์์ง๋์ด๋ง์ ๋ฐฉ์งํ๋ค.(YAGNI ์์น)
๊ฐ์ฅ ๊ฐ๋จํ ๋ฌธ์ ๋ถํฐ ๊ตฌํํ๋ผ โ ๊ฐ๋จํ ๊ธฐ๋ฅ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ตฌํํ๋ฉฐ ์ ์ฒด์ ์ธ ๊ธฐ๋ฅ์ ์์ฑํด ๋๊ฐ๋ ๊ฒ์ด ์ค์
์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง 100%๋ฅผ ๋ชฉํ๋ก ํ์ง ๋ง๋ผ โ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ฝ๋๋ฅผ ๊ฒ์ฆํ๋ ๊ฒ์ด ๋ชฉ์ ์ด ๋์ด์ผ ํ๋ค
TDD ์ฅ์
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ์๊ตฌ์ฌํญ์ ๋จผ์ ๋ถ์ํด์ผ ํ๋ฏ๋ก ๋ชจ๋ ์๊ตฌ์ฌํญ(๋ชฉํ)์ ๋ํด ์ดํดํ๊ณ ์ ๊ฒํ๋ ์๊ฐ์ ๊ฐ๊ฒ ๋๋ค.
์์ธ ์ผ์ด์ค๋ฅผ ๋ฏธ๋ฆฌ ๊ณ ๋ฏผํ๊ณ ์ ๋ฆฌํ๋ ๊ณผ์ ์ ํตํด ๋ฒ๊ทธ๊ฐ ์๊ธฐ๋ ๊ฒ์ ์ฌ์ ์ ๋ฐฉ์ง ํ ์ ์๋ค.
ํ ์คํธ๊ฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํจ์ผ๋ก์จ ์ฌ์ฉ์ ์ ์ฅ์์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
์ธํฐํ์ด์ค ์์ฃผ์ ์ฝ๋ ์์ฑ
์์คํ ์ ๋ฐ์ ์ธ ์ค๊ณ ํฅ์
๊ฐ๋ฐ ์ง์ค๋ ฅ ํฅ์
์ค๊ณ์ ๋ํ ํผ๋๋ฐฑ์ด ๋น ๋ฅด๋ค.
๊ฐ๋ฐ์ ์์ ๊ฐ์ด ์๊ธด๋ค
TDD ๋จ์
TDD๋ ์๋ก์ด ๊ฐ๋ ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๋ฐฐ์์ผํ๋ฏ๋ก ํ์ต ๊ณก์ ์ด ๋์ ์ ์๋ค.
ํ ์คํธ๋ฅผ ์์ฑ ๋ฐ ์คํํ๋ ์๊ฐ, ์ ์ง๋ณด์ ์๊ฐ ๋ฑ์ ๋ถ๊ฐ์ ์ธ ์๊ฐ์ด ํ์ํ๋ฏ๋ก ์ ์ฒด ๊ฐ๋ฐ ์๊ฐ์ด ์ฆ๊ฐํ ์ ์๋ค.
์๋ฏธ์๋ ํ
์คํธ ์์ฑํ๊ธฐ
ํ
์คํธ ํด์ผํ ๊ฒ
๊ธฐ๋ฅ ํ ์คํธ์ ์ด์ ์ ๋ง์ถ๊ณ , ์ฌ์ฉ์ ๊ด์ ์ ์ ์ ํ๋ก์ฐ๋ฅผ ํตํด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋์ง ํ ์คํธ
์ฌ์ฉ์ ์๊ตฌ์ฌํญ์ด ๋ชจ๋ ํ ์คํธ ์ผ์ด์คํ ๋์๋์ง
์ ์์ ์ธ ์ ๋ ฅ๊ฐ์ด ๋ค์ด์จ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ์๋ตํ๋์ง
์ ์์ ์ด์ง ์์ ์ ๋ ฅ์ด ๋ค์ด์จ ๊ฒฝ์ฐ(์ฃ์ง์ผ์ด์ค) ์ด๋ป๊ฒ ์๋ตํ๋์ง
ํ
์คํธํ์ง ์์๋ ๋๋ ๊ฒ
๋จ์ํ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋ํ๊ธฐ ์ํด ๋ชจ๋ ๋ผ์ธ์ ํ ์คํธ๋ฅผ ํ๋ ๊ฑด ๋ญ๋น๋ค.
๊ธฐ๋ฅ์ด ๋จ์ํ ๊ฒ
UI์ ๊ด๋ จ๋ ํ ์คํธ
Jest
์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฒฝ ํ ์คํธ ๋๊ตฌ
Jest ํน์ง
Test Runner & Assertion ํตํฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Zero config: ๋ณต์กํ ์ค์ ์ด ์๋ค.
Snapshots ์ ๊ณต: ์ด๋ ํ ์ค๋ธ์ ํธ ๋๋ ํ์ฌ์ ์ํ๋ฅผ ์บก์ณํ ์ ์๋ ๊ธฐ๋ฅ
Isolated: ๋ ๋ฆฝ์ ์ด๋ผ ํ ์คํธ ์ํํ๋ ์๋๋ ์ฑ๋ฅ์ด ๋ฐ์ด๋จ
Great API: ๋ค์ํ ํ ์คํธ api ์ ๊ณต
with Typescript
typescript(swc)์ ๊ฐ์ด ์ฌ์ฉํ๋ ค๋ฉด ์๋ ์ฝ๋์ ๊ฐ์ด ์ถ๊ฐ ์ค์ ์ด ํ์ํ๋ค
BDD ์คํ์ผ ํ
์คํธ ์ฝ๋ ์ํ
BDD ์คํ์ผ โ ๋์-ํ์ ์ค์ฌ์ผ๋ก ํ ์คํธ๋ฅผ ์กฐ์งํํ๋ ๋ฐฉ์.
setupTests.ts
ํ ์คํธ ํ๊ฒฝ์์ ํด๋น ํ์ผ์ ์ฝ๋๋ฅผ ๋ชจ๋ ํ ์คํธ ํ์ผ์ ํฌํจ์ํค๋ ์ญํ ์ ํ๋ค.
์ฝ๋์ ์ค๋ณต์ ํผํ๊ณ ๊น๋ํ๊ฒ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
Coverage
ํน์ ํ ์คํธ์ ์ปค๋ฒ๋ฆฌ์ง ์งํ ํ์ธํ๊ธฐ
Last updated