ํด๋น ๊ธ์ Kent-Beck์ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ By Example ์ด๋ผ๋ ์ฑ ์ ์ฝ๊ณ ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌ ๋ฐ ํ๊ณ ํ๋ ๊ธ ์ ๋๋ค. ์์ธํ ์ฌํญ์ YES 24 ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ ์์ ํ์ธํด์ฃผ์ธ์.
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ - Test Driven Development By Example (Kent-Beck)
- ์ธ์ฌ์ดํธ(insight)
- ์ง์์ด: Kent-Beck
- ์ฎ์์ด: ๊น์ฐฝ์ค, ๊ฐ๊ท์ญ
- ์ถ๊ฐ์ผ: 2014.02.15
์์
- ํ ์คํธ ํ๋ ์ถ๊ฐ
- ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํด์ ์ถ๊ฐํ ํ ์คํธ๊ฐ ์คํจํ๋์ง ํ์ธ
- ์ฝ๋๋ฅผ ์กฐ๊ธ ์์
- ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํ์์ผ์ ์ถ๊ฐํ ํ ์คํธ๊ฐ ์ฑ๊ณตํ๋์ง ํ์ธ
TDD์ ์ต์ข ๋ชฉํ
Clean Code That Works
์๋ํ๋ ๊น๋ํ ์ฝ๋๊ฐ ๋๋ ๊ฒ์ด TDD์ ๊ถ๊ทน์ ๋ชฉํ
ํ๋ผ์ด๋ฒ์
์ง๋ ์ฝ๋์์๋
equals ๋ผ๋ ๋ฉ์๋๋ฅผ ํตํด์ ๋์น์ฑ์ ํตํด์ times() ์ฐ์ฐ์ ํ ๊ฒฐ๊ณผ ๊ฐ์ฒด์ Dollar ๊ฐ์ฒด๊ฐ ์๋ก ๋
ผ๋ฆฌ์ ์ผ๋ก ๊ฐ์์ ์ฆ๋ช
ํ์๋ค.
์ง๊ธ๊น์ง์ ์ฝ๋๋ฅผ ์ ๊ฒํด๋ณด์.
public class Test {
public void testMultiplication() {
Dollar five = Dollar(5);
Dollar product = five.times(2);
assertEquals(10, product.amount);
product = five.times(3);
assertEquals(15, product.amount);
}
}
class Dollar {
int amount;
Dollar(int amount) {
this.amount = amount;
};
Dollar times(int multiplier){
return new Dollar(amount * multiplier);
}
public boolean equals(Object object) {
return amount == (Dollar) object;
}
@Test
public void testEquality() {
assertTrue(new Dollar(5).equals(new Dollar(5)));
assertFalse(new Dollar(5).equals(new Dollar(10)));
}
}
ํ์ง๋ง ์ฐ๋ฆฌ์ testMultiplication()
๋ฉ์๋๋ ๋์น์ฑ์ ํ
์คํธํ๊ณ ์์ง ์๋ค.
์ฐ๋ฆฌ๊ฐ ํ ์คํธํด์ผํ ๊ฒ์ times() ๋ฉ์๋๋ ์๋ก์ด Dollar ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋๊ฐ?๋ฅผ ํ์ธํด์ผ ํ๋ค.
๊ทธ๋์ testMultiplication() ๋ฉ์๋์์ ํ ์คํธ ํ๋ ๋ด์ฉ์ ๋ฐ๊ฟ ๊ฒ์ด๋ค.
public void testMultiplication() {
Dollar five = Dollar(5);
assertEquals(new Dollar(10), five.times(2));
assertEquals(new Dollar(15), five.times(3));
}
์ด๋ ๊ฒ ๋๋ค๋ฉด ํ์ฌ testMultiplication() ๋ฉ์๋๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํ ์คํธ๋ฅผ ์ํํ ์ ์๊ฒ ๋๋ค.
private
์ด์ ์ฝ๋๋ฅผ ๋ณด๋ฉด Dollar ํด๋์ค์ amount๋ฅผ ์ฌ์ฉํ๋ ๊ณณ์ ํด๋์ค ๋ด๋ถ๋ฐ์ ์์ผ๋ ๋ณ์๋ฅผ private์ผ๋ก ์ค์ ํ์.
class Dollar {
private int amount;
Dollar(int amount) {
this.amount = amount;
};
// ... ์๋ต
}
๋๊ธ