1. TDD
1. TDD
๐ก ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๋, ์ฆ ๊ตฌํ๋ณด๋ค ์ธํฐํ์ด์ค์ ์คํ์ ๋จผ์ ์ ์ํจ์ผ๋ก์จ ๊ฐ๋ฐ์ ์งํํ๋ ๋ฐฉ์
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ TDD FAQ Jest๋ฅผ ์ด์ฉํ ๊ฐ๋จํ TDD ์์
TDD Cycle
๐ ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉฐ ์ผ์ ์์ค์ ๋๋ฌํ ๋๊น์ง ์งํ
๐ด Red โ ์คํจํ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑ. ์ธํฐํ์ด์ค์ ์คํ์ ์ง์ค
์ธํฐํ์ด์ค : ์๊ทธ๋์ฒ์ ์งํฉ
์๊ทธ๋์ฒ : Ex.
add(x, y) -> number
์คํ : ์ด๋ค ์์ ์ ๊ธฐ๋๊ฐ
๐ข Green โ ์ฌ๋นจ๋ฆฌ ํ ์คํธ๋ฅผ ํต๊ณผ์ํค๊ธฐ. ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด ์๋์ด๋ ๊ด์ฐฎ์
๊ฐ์ง๋ก ์์ฑํ๊ธฐ(Mocking)
์ฃ์ ์ ์ง๋ฅด๊ธฐ
๐ Refactor โ ๋ฆฌํฉํ ๋ง์ ํตํด ์ฝ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๋ง๋ค๊ธฐ
์ฌ์ดํด ์์ ์๊ฐ : 1๋ถ ์ดํ๊ฐ ์ต๊ณ , 10๋ถ ์์ ํ ์ฌ์ดํด์ ๋๋ฆด ์ ์์ด์ผ ํจ
์คํจํ๋ ํ ์คํธ๋ฅผ ๊ฐ์ง๋ก๋ผ๋ ์์ฑํด์ผ ํ๋๋ฐ ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ฉด, 1๋ฒ์ด ๋๋ฌด ํฐ ๊ฒ
๋ ์ฝ๊ณ ์์ ๋ฌธ์ ๋ฅผ ์ ์ํด์ผ ํจ
๐๐ปโโ๏ธ ์ฃผ์ ์ฌํญ
์์ ๋จ๊ณ๋ฅผ ์ฐพ๊ณ , ์ฝ๋์์ ํผ๋๋ฐฑ์ ์ป๋ ๊ฒ์ด ์ด๋ ต๊ณ ์ค์ํ ํฌ์ธํธ 2๋ฒ์ด ์ด๋ ต๋ค๋ฉด 1๋ฒ์ผ๋ก ๋์๊ฐ์ ๋ ์๊ณ ์ฌ์ด ๋ฌธ์ ๋ฅผ ์ ์ํ๊ณ , 3๋ฒ์ ์ํด ์๋๋ฅผ ๋๋ฌ๋ด๊ณ ์ค๋ณต์ ์ฐพ์ ์ ๊ฑฐํ๋ ์ฐ์ต์ ํด์ผ ํจ ์ด ๋์ด ์ต์ํ์ง ์์ผ๋ฉด TDD๋ฅผ ํ๋ ๊ฒ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๊ณ , ์ด ๋์ด ์ด๋ ค์ฐ๋ฉด ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ๋๋ ํด๋ฆฐ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ ๋ํ ๋งค์ฐ ํ๋ฆ
๋ฆฌํฉํ ๋ง
๐ TDD์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ด์ง๋ง, ๊ฐ๊ณผ๋ ๋๊ฐ ๋ง์
TDD์ ๋ชฉํ๋ ์ ๋๋ก ์๋ํ๋ ํด๋ฆฐ์ฝ๋ โ ๋ฆฌํฉํ ๋ง ๋๋ถ์ ๊ฐ๋ฅํด์ง
๋จ์ํ ์คํธ๋ฅผ ํตํด ํ ์คํธ๊ฐ ํฐ์ง์ง ์๋ ์ ์์ ๊ณ์ ๋ฆฌํฉํ ๋ง
๋์์ ๋ฐ๋์ง ์๊ณ ์ค๊ณ๋ง ๋ฐ๋๋ ๊ฒ(์คํ์ ๊ทธ๋๋ก)
์ค๋ณต ์ ๊ฑฐ
์ ๋ณด์ด๋ฉด ์ฐ์ตํด์ผ ํจ ์๋๋ฅผ ๋๋ฌ๋ด๋ฉด ์ค๋ณต์ด ๋ณด์ด๋ ๊ฒฝ์ฐ๋ ์์ ์ค๋ณต์ ๊ณ์ ๋ง๋ค์ด๋ธ ํ ํจํด์ ์ฐพ์๋ด์ ์ ๋ฆฌ
โ ๏ธ TDD์ ๋ํด์ ์ฃผ์ํ ์
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค๊ณ ํด์ TDD ๊ฐ ์๋๋๋ค. TDD Cycle ์ ๋ฐ๋ผ ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๊ณ , ๊ตฌํํ๊ณ , ๋ฆฌํฉํฐ๋ง ํ๋ ๊ณผ์ ์ ์๊ฒฉํ๊ฒ ์ง์ผ์ ๊ฐ๋ฐ์ ์งํํด์ผ TDD ๋ผ๊ณ ํ ์ ์์ต๋๋ค. TDD ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ๊ณผ ๋ณ๊ฐ๋ก ๋ฐ๋ก ์ฐ์ต์ด ํ์ํ๊ณ ์ต๊ด์ ๋ค์ฌ์ผํ๋ ๋ถ์ผ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ TDD ๋ฅผ ์ ํ๊ธฐ ์ํด์๋ ํ ์คํธ ์ฝ๋ ์์ฑ๋ฒ ์์ฒด๋ถํฐ ๊ณต๋ถ๋ฅผ ํ์ ์ผ ํฉ๋๋ค. ๋น์ฅ์ TDD ๋ณด๋ค ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ต์ํด์ง๊ณ ์ด๋ป๊ฒ ํ๋ฉด ํ ์คํธ ์ฝ๋๋ฅผ ์ ์์ฑํ ์ ์์๊น์ ์ด์ ์ ๋ง์ถฐ ๊ณต๋ถํ์๋ฉด ์ข์ต๋๋ค.
2. Jest
Jest๋ ๋จ์์ฑ์ ์ด์ ์ ๋ JavaScript ํ ์คํธ ํ๋ ์์ํฌ Jest๋ Mocha์ Chai์ฒ๋ผ RSpec์ describe-it์ ์ง์ํ๊ณ , expect๋ก ๋จ์ธ(assertion) ๊ฐ๋ฅ Mocking๋ ๋ค์ํ ๋ ๋ฒจ์์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ โ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ๊ฐ์ถ ํ ์คํ ๋๊ตฌ ๐
ํ์ผ๋ช
sample.test.ts
sample.spec.ts
- ์ฃผ๋ก BDD ์คํ์ผ๋ก ์ฌ์ฉํ ๋
npx jest๋ฅผ ์คํํ์ ๋ ํฐ๋ฏธ๋์ ์ถ๋ ฅ๋๋ ๋ด์ฉ
ํ
์คํธ ์ผ์ด์ค
ํ ์คํธ ํด์ผํ๋ ํ๋ ํ๋์ ์ผ์ด์ค
ํ
์คํธ ์ผ์ด์ค๋ฅผ ์ ์ํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ
test ํจ์๋ก ๊ฐ๋ณ ํ ์คํธ๋ฅผ ๋์ดํ๋ ๋ฐฉ์
BDD ์คํ์ผ๋ก
์ฃผ์ฒด-ํ์ ์ค์ฌ
์ผ๋ก ํ ์คํธ๋ฅผ ์กฐ์งํํ๋ ๋ฐฉ์
jest.config.js
Jest์์ TypeScript ์ฌ์ฉํ๋๋ก jest.config.js
ํ์ผ ์์ฑ
Jest ์คํํ๊ธฐ
npx jest --watchAll
์ ์ ์ฅํ๊ฑฐ๋ ๋ด์ฉ์ด ๋ฐ๋ ๋๋ง๋ค ์๋์ผ๋ก ํ
์คํธ๋ฅผ ์งํ
๐จ ์ธ๋ถ ์์กด์ฑ
์๋ฒ๋ฅผ ๋์ฐ์ง ์๊ณ ํ ์คํธ๋ฅผ ์คํํ๋ฉด ์ค๋ฅ ๋ฐ์
SWC
Rust๋ก ๋ง๋ ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ
Jest๋ ํ์ ์คํฌ๋ฆฝํธ ๊ฒ์ฆ์ ํ์ง ์์ โ SWC๊ฐ ํ์ ์ ๋นผ๊ณ ํ ์คํธ๋ฅผ ๋๋ฆฌ๊ธฐ ๋๋ฌธ ํ์ ์ ์ก๊ณ ์ถ๋ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋จ
์ปดํ์ผ์ ์งํํ ๊ฒฐ๊ณผ๊ฐ js ํ์ผ๋ก ์๊ธฐ๋๋ฐ, ์ด๊ฒ์ ์๊ธฐ์ง ์๋๋ก ํ๋ ๋ช ๋ น
3. ํ
์คํธ ์ฝ๋ ์์ฑํ๊ธฐ
test ํจ์๋ก ๊ฐ๋ณ ํ
์คํธ ์์ฑ
์ฒ์์๋ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์งํํด๋ณผ ๊ฒ
BDD ์คํ์ผ๋ก ํ
์คํธ ๋์๊ณผ ํ์๋ฅผ ๋ช
ํํ ๋๋ฌ๋ด๊ธฐ
๐ BDD
์ด๋ค ๊ฒ์ ํ ์คํธ ํ ๊ฒ์ด๋ค
์ด๋ป๊ฒ ๋ ๊ฒ์ด๋ค
๐ก ๋จ์ํ ๊ฒฝ์ฐ์๋ test ํจ์๋ก ๊ฐ๋จํ๊ฒ ์์ฑ, BDD ์คํ์ผ์ ๋ณต์กํ ํ ์คํธ๋ฅผ ์งํํ ๊ฒฝ์ฐ์ ์ ์ฉ
add
- ์ฃผ์ดit
- ์ฃผ์ด๋ ~ ํ๋คexpect
- ๊ธฐ์กด์ ๊ฒฝ์ฐ์ ๋์ผ, ๊ธฐ๋๊ฐ
๋ค์ํ ๊ฒฝ์ฐ ๊ณ ๋ คํ๊ธฐ(Describe - Context - It ํจํด)
์ด ๊ณผ์ ์์ add ํจ์๊ฐ ๋ฐ๋๋๋ฐ, ์ด๋ฐ ๋ฐฉ๋ฒ์ด TDD
4. Describe - Context - It ํจํด
์ํฉ๋ง๋ค ๋ค๋ฅธ ๋งฅ๋ฝ์ ๋ฌ์ฌํ๋ ๊ฒ ์ฝ๋์ ํ๋์ ์ค๋ช ํ๋ ํจํด์ด๊ธฐ ๋๋ฌธ์ ์ดํดํ๊ธฐ ์ฌ์
RSpec์ describe-it์์ ๋ฐ์จ ํจํด
when
๋๋ with
์ฌ์ฉ
context๋ฅผ ์ง์ํ์ง ์์
์ฅ์
์ฐ๊ธฐ ํธํ๊ณ ์ฝ๋์ ์๋๊ฐ ๋ช ํํด์ง
๋ค์ํ ์ํฉ์ ๊ณ ๋ คํ ์ ์์ โ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง์ ์ฆ๋
์ ์ญ๋ณ์๋ฅผ ๋จ๋ฐํ๋ ๋ฌธ์ ํด๊ฒฐ
์ค๋ณต ์ ๊ฑฐ ์์
โ ์ด๋๊น์ง ๋ฆฌํฉํ ๋ง ํด์ผ ํ ๊น?
๋ด๊ฐ ๊ณ ์น๊ณ ์ถ์ ๋งํผ
์ฒ์ ์์ ํจ์
๋ค์ํ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ๋ฉฐ ๋ณํ๋ ํจ์
ํจํด ํ์
ํ๊ธฐ
์ฌ๊ท๋ฅผ ํตํ ํ์ด
์๋ซ์ค๋ถํฐ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ธฐ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐ
์ต์ข
์ฝ๋
์ฌ๊ท๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ reduce๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฑฐ์ ๋ค ํด๊ฒฐ ๊ฐ๋ฅ
5. ๋จ์ ํ
์คํธ
์์ค ์ฝ๋์ ํน์ ๋ชจ๋์ด ์๋๋ ๋๋ก ์ ํํ ์๋ํ๋์ง ๊ฒ์ฆํ๋ ์ ์ฐจ ๋ชจ๋ ํจ์์ ๋ฉ์๋์ ๋ํ ํ ์คํธ ์ผ์ด์ค(Test case)๋ฅผ ์์ฑํ๋ ์ ์ฐจ
Last updated