๋ฐ๋ก ์ผ๋ง ์ TDD๋ฅผ ์ด์ฉํ ํ ์ดํ๋ก์ ํธ๋ฅผ ์งํํ ์ ์ด ์์ด์ ๋ ๊ด์ฌ์๊ฒ ์ฝ์๋ค.
์ฑ
์ ๋์จ TDD ๋ฒ์น ์ธ๊ฐ์ง๋ ๋๋ฆ ์ง์ผ๊ฐ๋ฉฐ ํ๋ก์ ํธ๋ฅผ ์งํํ์ง๋ง, ๋๋จธ์ง ๋ด์ฉ๋ค๋ ์ ์ค์ํ๋์ง๋..์์งํ ์ ๋ชจ๋ฅด๊ฒ ๋ค...
์ธ๊ฐ์ง์ ๋ฒ์น๋, ์ฒ์ ๊ฐ๋ฐํ ๋์๋ ์ ์ง์ผฐ์ง๋ง ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ์ฝ๋๋ฅผ ๊ณ ์น ๋์๋ ์ค์ ์ฝ๋๋ฅผ ๋จผ์ ๊ณ ์น๊ณ ๊ทธ์ ๋ง์ถฐ์ ํ
์คํธ ์ฝ๋๋ฅผ ์์ ํ๋ ๊ฒ ๊ฐ๋ค...
๋ด๊ฐ ๋๊ผ๋ TDD์ ์ฅ์ ์ Lowย Level์ย ์ฝ๋๋ถํฐย ์์ฑํ๊ธฐย ๋๋ฌธ์ย ํ๋ก์ ํธย ๋์คย ๋ฐ์ํ๋ย ๊ด๋ จย ๋ฉ์๋ย ๋ฆฌํฉํ ๋งย ๋น์ฉ์ดย ๊ฐ์ํ๋ค๋ ๊ฒ๊ณผ, ์ค์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ค์ํ ์ผ์ด์ค๋ฅผ ํ ์คํธ ํด๋ณผ ์ ์๋ค๋ ๊ฒ์ด์๋ค.
๊ฐ๋จํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ํ๋ก์ ํธ์๊ธฐ ๋๋ฌธ์ ํ ์คํธ ์ฝ๋ ์ญ์ ๊ฐ๋ ์ฑ์ ๋์์ง ์์๋ค.
ํ๋์ assert์ผ๋ก ์ค๋ฅ๋ฅผ ์ฐพ์๋ผ ์ ์์ด์ ๋ ๊ฐ ์ด์์ assert์ ์ฌ์ฉํ ๋ถ๋ถ๋ค์ด ์กด์ฌํ๋ค. ์ค์ ๋ฉ์๋์ ๊ฐ๊ฐ ๋์ํ๋ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก, ๋ฉ์๋์ ๊ธฐ์ค์ผ๋ก ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋ฉ์๋์ ์ฌ๋ฌ๊ฐ์ ๊ธฐ๋ฅ๊ณผ ๋ก์ง์ด ์์ ๋ ํ๋์ assert์ผ๋ก ๋ชจ๋ ๊ณผ์ ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๊ธฐ ์ด๋ ค์ ๋ ๊ฒ์ด๋ค.
๋ ๋์๊ฐ์๋ ํ๋์ ๋ฉ์๋์์ ์ฌ๋ฌ ๊ฐ์ ๊ธฐ๋ฅ๊ณผ ๋ก์ง์ ๋ด๋นํ๋ ๊ฒ๋ถํฐ๊ฐ ๋ฌธ์ ์์ ์๋ ์๋ค๋ ์๊ฐ์ด ๋ค์๋ค.๐ง
์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๋ฉด์ ํ
์คํธ ์ฝ๋๋ณด๋ค ์ค์ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ ๊ฒฝ์ฐ๋ ์์๋ค. ์ด ๊ฒฝ์ฐ์๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ณด๋ ํ
์คํธ๊ฐ ๋ถ๊ฐ๋ฅํ ์ฝ๋์ฌ์ ๋ค์ ์์
ํ ์ ๋ ์๋ค.
์ค์ ์ฝ๋ ์์ - ํ
์คํธ ์ฝ๋ ์์ ๋ถ๊ฐ - ์ค์ ์ฝ๋๋ฅผ ํ
์คํธ์ ๋ง์ถฐ ์์ - ํ
์คํธ๋ ์์ ์ ์์๋ก ์งํํ ๊ฒ์ด๋ค...
์ฑ
์์ ๋งํ ๊ฒ๊ณผ ๊ฐ์ด ํ
์คํธ ์ผ์ด์ค์ ์ ์ง ๋ณด์ ๋น์ฉ์ด ์ฆ๊ฐํ๋ค.
์์ธ์ ์ญ์ ํ
์คํธ ์ฝ๋๊ฐ ํด๋ฆฐํ์ง ์๊ฒ, ํ๋์ ํ
์คํธ์ ์ฌ๋ฌ ๊ฐ์ ๊ธฐ๋ฅ์ด ์์๋ ํ ๊ฐ๋ค. ๋, ํ
์คํธ ์ฝ๋๊ฐ ๋ช
๋ฃํ์ง ์์์ ์ฝ๋๋ฅผ ๋ค์ ๋ถ์ํ๊ณ ์ดํดํด์ผ ํ๊ณ , ์ฝ๋๊ฐ ๋จ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์์ ํด์ผํ ๋ถ๋ถ๋ ์ฌ๋ฌ ๊ณณ ๋ฐ์ํ๋ค.
์ค๋ ์ฝ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก TDD ๊ธฐ๋ฐ์ ํ๋ก์ ํธ๋ฅผ ํ๋ฒ ๋ ์งํํด๋ณด๊ณ ์ถ์ด์ก๋ค.
๋ด๊ฐ ์งํํ๋ ํ ์ดํ๋ก์ ํธ๋ ์์ฑ ํ ํ๋๋ฒ ๋ฆฌํฉํ ๋งํ๊ณ ๋๋ฉด ์๋ฃ๋ ๋ค๋ฅผ ๋ฐ ์๊ธฐ ๋๋ฌธ์, ์ค์ ์๋น์ค๊ฐ ๋์ง ์๋ ํ๋ก์ ํธ์์๋ TDD๊ฐ ์ ์ฉํ ์ง ์๋ฌธ์ด ๋ค์์๋ค.
ํ์ง๋ง ์ฑ
์ ์ฝ์ผ๋ฉด์ ์๊ฐํด๋ณด๋ ์กฐ๊ธ ๋ ๊นจ๋ํ๊ณ ์ ์ ํ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ์๋๋ผ๋ฉด, ๋ ํจ์จ์ ์ธ ํ๋ก์ ํธ ์งํ์ด ๋์์์ง๋ ๋ชจ๋ฅธ๋ค๊ณ ์๊ฐํ๋ค.
๋ฐ์ฑ์ ์๊ฐ...
์์ ์ธ๊ฐ์ง ๊ท์น์ ๋ฐ๋ฅด๋ฉด ๊ฐ๋ฐ๊ณผ ํ
์คํธ๊ฐ ๋งค์ฐ ์งง์ ์ฃผ๊ธฐ๋ก ๋ฐ๋ณต๋๋ค.
์ด๋๋ก ๊ณ์ ์งํํ๋ค๋ฉด ์ค์ ์ฝ๋๋ฅผ ์ฌ์ค์ ์ ๋ถ ํ
์คํธํ๋ ํ
์คํธ ์ผ์ด์ค๊ฐ ๋์จ๋ค. ํ์ง๋ง ์ค์ ์ฝ๋์ ๋ง๋จน์ ์ ๋๋ก ๋ฐฉ๋ํ ํ
์คํธ ์ฝ๋๋ ์ฌ๊ฐํ ๊ด๋ฆฌ ๋ฌธ์ ๋ฅผ ์ ๋ฐํ๊ธฐ๋ ํ๋ค.
์ง์ ๋ถํ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์คํ๋ ค ํ ์คํธ๋ฅผ ํ์ง ์๋ ๊ฒ๋ณด๋ค ๋ชปํ๋ค.
์ฝ๋์ ๋ณ๋์ด ์๊ธฐ๋ฉด ํ
์คํธ ์ฝ๋๋ ๋ณ๊ฒฝ๋์ด์ผํ๋๋ฐ, ํ
์คํธ ์ฝ๋๊ฐ ๋ณต์กํ ์๋ก ์ค์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ์๊ฐ๋ณด๋ค ํ
์คํธ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ ์ด๋ ค์์ง๋ค.
์ค์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ ๊ธฐ์กด ํ
์คํธ ์ฝ๋๋ฅผ ์คํจํ๊ธฐ ์์ํ๋ฉด, ํ
์คํธ ์ฝ๋๋ ์ ์ ๋ ์ด๋ ค์์ง๊ณ ๋์ด๋๋ค. ๋ฐ๋ผ์ ์ ๋ฒ์ ์ ์ถ์ํ ๋๋ง๋ค ํ
์คํธ ์ผ์ด์ค์ ๋๋ ์ ์ง ๋ณด์ ๋น์ฉ๋ ๋์ด๋๋ค. ๊ฒฐ๊ตญ ํ
์คํธ ์ํธ๋ฅผ ํ๊ธฐํด์ผํ๋ ์ํฉ์ ์ฒํ๋ค.
ํ์ง๋ง ํ ์คํธ๊ฐ ์์ผ๋ฉด ๊ฒฐํจ์ ์ฐพ์๋ด๊ณ ์ฝ๋๋ฅผ ๊ฒ์ฆํ ์ ์๊ณ , ๊ฒฐํจ์จ์ด ๋์์ง๋ค. ๊ฒฐํจ์ด ๋ง์์ง๋ฉด ๊ฐ๋ฐ์๋ ๋ณ๊ฒฝ์ ์ฃผ์ ํ๊ฒ ๋๊ณ ์ฝ๋๊ฐ ์ ์ฐจ ๋ง๊ฐ์ง๊ฒ ๋๋ค.
๊ฒฐ๋ก ์, ๊นจ๋ํ ๋จ์ ํ ์คํธ ์ฝ๋๋ฅผ ์ง์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ํ ์คํธ ์ฝ๋๋ ์ฌ๊ณ ์ ์ค๊ณ์ ์ฃผ์๊ฐ ํ์ํ๋ค. ์ค์ ์ฝ๋ ๋ชป์ง ์๊ฒ ๊นจ๋ํด์ผํ๋ค.
์ ๋๋ก ๋ ํ
์คํธ ์ฝ๋๊ฐ ์์ผ๋ฉด ๋ณ๊ฒฝ์ด ์ฌ์์ง๊ธฐ ๋๋ฌธ์ ์ ์ฐ์ฑ, ์ ์ง๋ณด์์ฑ, ์ฌ์ฌ์ฉ์ฑ์ ์ ๊ณตํ๋ค.
๋ฐ๋๋ก ํ
์คํธ ์ฝ๋๊ฐ ์ง์ ๋ถํ๋ฉด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฅ๋ ฅ์ด ๋จ์ด์ง๋ฉฐ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๋ ๋ฅ๋ ฅ๋ ๋จ์ด์ง๋ค.
๊นจ๋ํ ํ
์คํธ ์ฝ๋๋ฅผ ๋ง๋๋ ค๋ฉด ๊ฐ๋
์ฑ์ด ๊ฐ์ฅ ์ค์ํ๋ค.
๊ฐ๋
์ฑ์ ์ค์ ์ฝ๋๋ณด๋ค ํ
์คํธ ์ฝ๋์์ ๋์ฑ ์ค์ํ๋ค. ๊ฐ๋
์ฑ์ ๋์ด๊ธฐ ์ํด์๋? ๋ช
๋ฃ์ฑ, ๋จ์์ฑ, ํํ๋ ฅ์ด ํ์ํ๋ค.
ํ
์คํธ ์ฝ๋๋ ์ต์์ ํํ์ผ๋ก ๋ง์ ๊ฒ์ ๋ํ๋ด์ผ ํ๋ค.
ํ
์คํธ ๋น assert์ ํ๋๋ง ์ฌ์ฉํด์ผํ๋ค๊ณ ์ฃผ์ฅํ๋ ์๊ฒฌ์ด ์๋๋ฐ, ๊ฐํนํ๋ค๊ณ ๋๊ปด์ง ์ ์์ง๋ง ํ์คํ ์ฅ์ ์ด ์๋ค. assert๋ฌธ์ด ๋จ ํ๋์ธ ํจ์๋ ๊ฒฐ๋ก ์ด ํ๋๋ผ์ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ณ ๋น ๋ฅด๋ค.
์ด๋ ๊ฒ ํ
์คํธ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ์ฝ๋์ ์ค๋ณต์ด ๋ง์์ง๋ค. ์ด๊ฒ์ TEAMPLATE METHOD ํจํด์ ์ฌ์ฉํ๋ฉด ์ค๋ณต์ ์ ๊ฑฐํ ์ ์๋ค. givem/when ๋ถ๋ถ์ ๋ถ๋ชจ ํด๋์ค์ ๋๊ณ then ๋ถ๋ถ์ ์์ ํด๋์ค์ ๋๋ฉด ๋๋ค. ํ์ง๋ง ์ด๋ฐ ๋ฐฉ์์ ์ฝ๋๊ฐ ๊ณผ๋ํ๊ฒ ๋ง์์ง ์ ์๋ค.
์ด์ฒ๋ผ ํ์์ฑ์ ๋ฐ๋ผ ํ๋์ ํจ์์ ์ฌ๋ฌ assert๋ฌธ์ ๋ฃ์ ์๋ ์์ง๋ง, assert๋ฌธ์ ๊ฐ์๋ ์ต๋ํ ์ค์ฌ์ผ ์ข๋ค.
์ฌ๋ฌ๊ฐ์ ๊ฐ๋ ์ ์ฐ์์ผ๋ก ํ ์คํธํ๋ ๊ธด ํจ์๋ ํผํ๋ค. ์ฌ๋ฌ ๊ฐ๋ ์ ํ๋์ ํจ์๋ก ๋ชฐ์๋ฃ์ผ๋ฉด ๊ฐ ์ฝ๋์ ์ด์ ์ ๊ฐ ์ ์ด ํ ์คํธํ๋ ๊ฐ๋ ์ ๋ชจ๋ ์ดํดํด์ผ ํ๋ค.
๊นจ๋ํ ํ
์คํธ๋ ๋ค์ ๋ค์ฏ๊ฐ์ง ๊ท์น์ ๋ฐ๋ฅธ๋ค.
1. Fast
ํ
์คํธ๋ ๋นจ๋ผ์ผ ํ๋ค. ํ
์คํธ๊ฐ ๋๋ ค์ ์์ฃผ ๋๋ฆฌ์ง ์์ผ๋ฉด ์ด๋ฐ์ ๋ฌธ์ ๋ฅผ ์ฐพ์๋ด๊ฑฐ๋ ์ฝ๊ฒ ์ ๋ฆฌํ์ง ๋ชปํ๋ค.
2. Imdependent
๊ฐ ํ
์คํธ๋ ๋
๋ฆฝ์ ์ด์ด์ผ ํ๋ค. ์๋ก ์์กดํ๋ฉด ์๋๋ค. ์ด๋ค ์์๋ก ์คํํด๋ ๊ด์ฐฎ์์ผ ํ๋ค. ํ
์คํธ๊ฐ ์๋ก์๊ฒ ์์กดํ๋ฉด ํ๋๊ฐ ์คํจํ ๋ ๋๋จธ์ง๋ ์ฐ๋ฌ์ ์คํจํ๊ธฐ ๋๋ฌธ์ ์์ธ์ ์ฐพ์๋ด๊ธฐ ํ๋ค๊ณ ๊ฒฐํจ์ด ์จ๊ฒจ์ง๋ค.
3. Repeatable
ํ
์คํธ๋ ์ด๋ค ํ๊ฒฝ์์๋ ๋ฐ๋ณต ๊ฐ๋ฅํด์ผ ํ๋ค. ์ค์ ํ๊ฒฝ, QA ํ๊ฒฝ, ๋คํธ์ํฌ๊ฐ ์๋ ํ๊ฒฝ ๋ฑ์์๋ ์คํํ ์ ์์ด์ผ ํ๋ค. ํ๊ฒฝ ๋๋ฌธ์ ํ
์คํธ๊ฐ ์คํจํ๋ ๊ฒฝ์ฐ๊ฐ ์์ด์๋ ์๋๋ค. ๋, ํ๊ฒฝ์ด ์ง์๋์ง ์๊ธฐ์ ํ
์คํธ๋ฅผ ์ํํ์ง ๋ชปํ๋ ์ผ์ด ์๋๋ก ํด์ผ ํ๋ค.
4. Self-Vaildating
ํ
์คํธ๋ ์๊ฐ๊ฒ์ฆ ํ ์ ์์ด์ผํ๋ค. ํ
์คํธ๋ Bool ๊ฐ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ด์ผ ํ๋ค. ํต๊ณผ ์ฌ๋ถ๋ฅผ ์๊ธฐ ์ํด ๋ก๊ทธ ํ์ผ์ ์ฝ๊ฒ ๋๋ฉด ์๋๋ค. ํ
์คํธ๋ฅผ ์ง์ ๋น๊ตํด์๋ ์๋๋ค. ํ
์คํธ๊ฐ ์ค์ค๋ก ์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ๊ฐ๋ ํ์ง ์๋๋ค๋ฉด ํ๋จ์ ์ฃผ๊ด์ ์ด ๋๋ฉฐ ์์์
์ด ํ์ํ๊ฒ ๋๋ค.
5. Timely
ํ
์คํธ๋ ์ ์์ ์์ฑํด์ผ ํ๋ค. ๋จ์ ํ
์คํธ๋ ํ
์คํธํ๋ ค๋ ์ค์ ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ง์ ์ ๊ตฌํํ๋ค. ์ฝ๋๋ฅผ ๊ตฌํํ ๋ค์ ํ
์คํธ ์ฝ๋๋ฅผ ๋ง๋ค๋ฉด ์ค์ ์ฝ๋๊ฐ ํ
์คํธํ๊ธฐ ์ด๋ ค์ด ์ฝ๋๊ฐ ๋ ์๋ ์๋ค. ์ค์ ์ฝ๋๊ฐ ํ
์คํธ๊ฐ ๋ถ๊ฐ๋ฅํ๋๋ก ๋จผ์ ์ง์ฌ์ง ์ ์๋ค.
ํ
์คํธ ์ฝ๋๋ ์ค์ ์ฝ๋๋งํผ์ด๋ ํ๋ก์ ํธ์ ์ค์ํ๋ค. ํ
์คํธ ์ฝ๋๋ ์ค์ ์ฝ๋์ ์ ์ฐ์ฑ, ์ ์ง๋ณด์์ฑ, ์ฌ์ฌ์ฉ์ฑ์ ๋ณด์กดํ๊ณ ๊ฐํํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ
์คํธ ์ฝ๋๋ ์ง์์ ์ผ๋ก ๊นจ๋ํ๊ณ ๊ฐ๊ฒฐํ๊ฒ ์ ๋ฆฌํ๊ณ ๊ด๋ฆฌํด์ผ ํ๋ค.
ํ
์คํธ API๋ฅผ ๊ตฌํํด ๋๋ฉ์ธ ํนํ ์ธ์ด๋ฅผ ๋ง๋๋ ๊ฒ๋ ์ข๋ค.