๐ค Chapter 3: ๋จ์ ํ ์คํธ ๊ตฌ์กฐ
๐ฅ ๋จ์ ํ ์คํธ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒโ
๐ AAA ํจํด ์ฌ์ฉโ
AAA ํจํด์ ๊ฐ ํ
์คํธ๋ฅผ ์ค๋น, ์คํ, ๊ฒ์ฆ์ด๋ผ๋ ์ธ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ์๋ค. ๋ ์ซ์์ ํฉ์ ๊ณ์ฐํ๋ ๋ฉ์๋๋ง ์๋ Calculator
ํด๋์ค๋ฅผ ์ดํด๋ณด์.
public class Calculator {
public double Sum(double first, double second) {
return first + second;
}
}
๋ค์ ์์ ๋ ํด๋์ค์ ๋์์ ๊ฒ์ฆํ๋ ํ ์คํธ๋ค. ์ด ํ ์คํธ๋ AAA ํจํด์ ๋ฐ๋ฅธ๋ค.
public class CalculatorTests {
[Fact]
public void Sum_of_two_numbers() {
// ์ค๋น
double first = 10;
double second = 20;
var calculator = new Calculator();
// ์คํ
double result = calculator.Sum(first, second);
// ๊ฒ์ฆ
Assert.Equal(30, result);
}
}
AAA ํจํด์ ์ค์ํธ ๋ด ๋ชจ๋ ํ ์คํธ๊ฐ ๋จ์ํ๊ณ ๊ท ์ผํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ๋ฐ ๋์์ด ๋๋ค. ์ด๋ฌํ ์ผ๊ด์ฑ์ด ์ด ํจํด์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ค ํ๋๋ค. ์ผ๋จ ์ต์ํด์ง๋ฉด ๋ชจ๋ ํ ์คํธ๋ฅผ ์ฝ๊ฒ ์ฝ์ ์ ์๊ณ ์ดํดํ ์ ์๋ค. ๊ฒฐ๊ตญ ์ ์ฒด ํ ์คํธ ์ค์ํธ์ ์ ์ง ๋ณด์ ๋น์ฉ์ด ์ค์ด๋ ๋ค. ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ค๋น ๊ตฌ์ ์์๋ ํ ์คํธ ๋์ ์์คํ (SUT)๊ณผ ํด๋น ์์กด์ฑ์ ์ํ๋ ์ํ๋ก ๋ง๋ ๋ค.
- ์คํ ๊ตฌ์ ์์๋ SUT์์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์ค๋น๋ ์์กด์ฑ์ ์ ๋ฌํ๋ฉฐ ์ถ๋ ฅ ๊ฐ์ ์บก์ฒํ๋ค.
- ๊ฒ์ฆ ๊ตฌ์ ์์๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๋ค. ๊ฒฐ๊ณผ๋ ๋ฐํ ๊ฐ์ด๋ SUT์ ํ๋ ฅ์์ ์ต์ข ์ํ, SUT๊ฐ ํ๋ ฅ์์ ํธ์ถํ ๋ฉ์๋ ๋ฑ์ผ๋ก ํ์๋ ์ ์๋ค.
Given-When-Then ํจํด
AAA์ ์ ์ฌํ Given-When-Then ํจํด์ ๋ํด ๋ค์ด๋ดค์ ๊ฒ์ด๋ค. ์ด ํจํด๋ ํ ์คํธ๋ฅผ ์ธ ๋ถ๋ถ์ผ๋ก ๋๋๋ค.
- Given - ์ค๋น ๊ตฌ์ ์ ํด๋น
- When - ์คํ ๊ตฌ์ ์ ํด๋น
- Then - ๊ฒ์ฆ ๊ตฌ์ ์ ํด๋น
ํ ์คํธ ๊ตฌ์ฑ ์ธก๋ฉด์์ ๋ ๊ฐ์ง ํจํด ์ฌ์ด์ ์ฐจ์ด๋ ์๋ค. ์ ์ผํ ์ฐจ์ด์ ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋ ์ฌ๋์๊ฒ Given-When-Then ๊ตฌ์กฐ๊ฐ ๋ ์ฝ๊ธฐ ์ฝ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก Given-When-Then์ ๋น๊ธฐ์ ์๋ค๊ณผ ๊ณต์ ํ๋ ํ ์คํธ์ ๋ ์ ํฉํ๋ค.
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ์ค์ฒํ ๋, ์ฆ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๊ธฐ ์ ์ ์คํจํ ํ ์คํธ๋ฅผ ๋ง๋ค ๋๋ ์์ง ๊ธฐ๋ฅ์ด ์ด๋ป๊ฒ ๋์ํ ์ง ์ถฉ๋ถํ ์์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ ๋จผ์ ๊ธฐ๋ํ๋ ๋์์ผ๋ก ์ค๊ณฝ์ ์ก์ ๋ค์, ์ด๋ฌํ ๊ธฐ๋์ ๋ถ์ํ๊ธฐ ์ํ ์์คํ ์ ์ด๋ป๊ฒ ๊ฐ๋ฐํ ์ง ์๋ ๊ฒ์ด ์ข๋ค.
์ง๊ด์ ์ด์ง๋ ์์ง๋ง, ์ด๊ฒ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์์ด๋ค. ํน์ ๋์์ด ๋ฌด์์ ํด์ผ ํ๋์ง์ ๋ํ ๋ชฉํ๋ฅผ ์๊ฐํ๋ฉด์ ์์ํ๋ค. ๊ทธ๋ค์์ด ์ค์ ๋ฌธ์ ํด๊ฒฐ์ด๋ค. ๋ค๋ฅธ ๊ฒ์ ํ๊ธฐ ์ ์ ๊ฒ์ฆ๋ฌธ์ ์์ฑํ๋ ๊ฒ์ ๋จ์ง ์ฌ๊ณ ๊ณผ์ ์ ํ์์ด๋ค. ๊ทธ๋ฌ๋ ๋ค์ ๋งํ์ง๋ง, ์ด ์ง์นจ์ TDD๋ฅผ ์ค์ฒํ ๋, ์ฆ ์ ํ ์ฝ๋ ์ ์ ํ ์คํธ๋ฅผ ์์ฑํ ๋๋ง ์ ์ฉ๋ ์ ์๋ค. ํ ์คํธ ์ ์ ์ ํ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด ํ ์คํธ๋ฅผ ์์ฑํ ์์ ์ ์คํ์์ ๋ฌด์์ ์์ํ๋์ง ์ด๋ฏธ ์๊ณ ์์ผ๋ฏ๋ก ์ค๋น ๊ตฌ์ ๋ถํฐ ์์ํ๋ ๊ฒ์ด ์ข๋ค.
๐ ์ฌ๋ฌ ๊ฐ์ ์ค๋น, ์คํ, ๊ฒ์ฆ ๊ตฌ์ ํผํ๊ธฐโ
๋๋ก๋ ์ค๋น, ์คํ ๋๋ ๊ฒ์ฆ ๊ตฌ์ ์ด ์ฌ๋ฌ ๊ฐ์๋ ํ ์คํธ๋ฅผ ๋ง๋ ์ ์๋ค.
๊ฒ์ฆ ๊ตฌ์ ๋ก ๊ตฌ๋ถ๋ ์ฌ๋ฌ ๊ฐ์ ์คํ ๊ตฌ์ ์ ๋ณด๋ฉด, ์ฌ๋ฌ ๊ฐ์ ๋์ ๋จ์๋ฅผ ๊ฒ์ฆํ๋ ํ ์คํธ๋ฅผ ๋ปํ๋ค. ์ด๋ฌํ ํ ์คํธ๋ ๋ ์ด์ ๋จ์ ํ ์คํธ๊ฐ ์๋๋ผ ํตํฉ ํ ์คํธ๋ค. ์ด๋ฌํ ํ ์คํธ ๊ตฌ์กฐ๋ ํผํ๋ ๊ฒ์ด ์ข๋ค. ์คํ์ด ํ๋๋ฉด ํ ์คํธ๊ฐ ๋จ์ ํ ์คํธ ๋ฒ์ฃผ์ ์๊ฒ๋ ๋ณด์ฅํ๊ณ , ๊ฐ๋จํ๊ณ , ๋น ๋ฅด๋ฉฐ, ์ดํดํ๊ธฐ ์ฝ๋ค. ์ผ๋ จ์ ์คํ๊ณผ ๊ฒ์ฆ์ด ํฌํจ๋ ํ ์คํธ๋ฅผ ๋ณด๋ฉด ๋ฆฌํฉํฐ๋งํ๋ผ. ๊ฐ ๋์์ ๊ณ ์ ์ ํ ์คํธ๋ก ๋์ถํ๋ผ.
ํตํฉ ํ ์คํธ์์๋ ์คํ ๊ตฌ์ ์ ์ฌ๋ฌ ๊ฐ ๋๋ ๊ฒ์ด ๊ด์ฐฎ์ ๋๋ ์๋ค. ํตํฉ ํ ์คํธ๋ ๋๋ฆด ์ ์๋ค. ์๋๋ฅผ ๋์ด๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ํตํฉ ํ ์คํธ๋ฅผ ์ฌ๋ฌ ์คํ๊ณผ ๊ฒ์ฆ์ด ์๋ ๋จ์ผํ ํ ์คํธ๋ก ๋ฌถ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ ๋ค์ ๋งํ์ง๋ง, ์ด ์ต์ ํ ๊ธฐ๋ฒ์ ํตํฉ ํ ์คํธ์๋ง ์ ์ฉํ ์ ์๋ค. ๊ทธ๊ฒ๋, ์ ๋ถ๊ฐ ์๋๋ผ ์ด๋ฏธ ๋๋ฆฌ๊ณ ๋ ๋๋ ค์ง๊ฒ ํ๊ณ ์ถ์ง ์์ ํ ์คํธ๋ค๋ง์ด๋ค. ๋จ์ ํ ์คํธ๋ ์ถฉ๋ถํ ๋น ๋ฅธ ํตํฉ ํ ์คํธ์์๋ ์ด๋ฌํ ์ต์ ํ๊ฐ ํ์ํ์ง ์๋ค.