DAY 18
๐ย ์ค๋ ์ฝ์ ๋ฒ์ : 9. ๋จ์ํ
์คํธ(164~168p)
๐คย ์ฑ
์์ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ
ํ
์คํธ๋น assert ํ๋
- ํจ์๋ง๋ค assert๋ฌธ์ ๋จ ํ๋๋ง ์ฌ์ฉํด์ผํ๋ค โ ๊ฒฐ๋ก ์ด ํ๋์ด๋ฏ๋ก ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ณ ๋น ๋ฅด๋ค
- ๊ฒฐ๋ก ์ด ๋ ๊ฐ ์ด์์ด๋ฉด? โ ํ
์คํธ๋ฅผ ๋๊ฐ๋ก ์ชผ๊ฐ ๋ค
public void testGetPageHierarchyAsXml() throws Exception {
givenPages("PageOne", "PageOne.ChildOne", "PageTwo");
whenRequestIsIssued("root", "type:pages");
thenResponseShouldBeXML();
}
public void testGetPageHierarchyHasRightTags() throws Exception {
givenPages("PageOne", "PageOne.ChildOne", "PageTwo");
whenRequestIsIssued("root", "type:pages");
thenResponseShouldContain(
"<name>PageOne</name>", "<name>PageTwo</name>", "<name>ChildOne</name>"
);
}
- ๋จ ํ
์คํธ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ์ค๋ณต๋๋ ์ฝ๋๊ฐ ๋ง์์ง๋ค
- Template Method ํจํด์ ์ฌ์ฉํ์ฌ ์ค๋ณต ์ ๊ฑฐ
- given/when ๋ถ๋ถ์ ๋ถ๋ชจ ํด๋์ค์ ๋๊ณ then ๋ถ๋ถ์ ์์ ํด๋์ค์ ๋๋ค
- ํน์
@Before
ํจ์์ given/when ๋ถ๋ถ์ ๋ฃ๊ณ @Test
ํจ์์ then ๋ถ๋ถ์ ๋ฃ๋๋ค
ํ
์คํธ๋น ๊ฐ๋
ํ๋
- ์ฌ๋ฌ ๊ฐ๋
์ ํ ํจ์๋ก ๋ชฐ์๋ฃ์ผ๋ฉด ๋
์๊ฐ ๊ฐ๊ฐ ๊ฐ๋
์ ๋ชจ๋ ์ดํดํด์ผ๋งํ๋ค
- ์๋ ํ
์คํธ ์ฝ๋๋ฅผ 3๊ฐ๋ก ๋ถ๋ฆฌํ๋ฉด..
public void testAddMonths() {
SerialDate d1 = SerialDate.createInstance(31, 5, 2004);
SerialDate d2 = SerialDate.addMonths(1, d1);
assertEquals(30, d2.getDayOfMonth());
assertEquals(6, d2.getMonth());
assertEquals(2004, d2.getYYYY());
SerialDate d3 = SerialDate.addMonths(2, d1);
assertEquals(31, d3.getDayOfMonth());
assertEquals(7, d3.getMonth());
assertEquals(2004, d3.getYYYY());
SerialDate d4 = SerialDate.addMonths(1, SerialDate.addMonths(1, d1));
assertEquals(30, d4.getDayOfMonth());
assertEquals(7, d4.getMonth());
assertEquals(2004, d4.getYYYY());
}
- 31์ผ๋ก ๋๋๋ ๋ฌ์ ๋ง์ง๋ง ๋ ์๊ฐ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ
- 30์ผ๋ก ๋๋๋ ํ ๋ฌ์ ๋ํ๋ฉด ๋ ์ง๋ 30์ผ์ด ๋์ด์ผํ๋ค (31์ผ์ด ๋๋ฉด ์๋๋ค)
- ๋ ๋ฌ์ ๋ํ๋ฉด, ๋ ๋ฒ์งธ ๋ฌ์ด 31์ผ๋ก ๋๋๋ฉด ๋ ์ง๋ 31์ผ์ด ๋์ด์ผ ํ๋ค.
- 30์ผ๋ก ๋๋๋ ใด๋ฌ์ ๋ง์ง๋ง ๋ ์๊ฐ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ
- 31์ผ๋ก ๋๋๋ ํ ๋ฌ์ ๋ํ๋ฉด ๋ ์ง๋ 30์ผ์ด ๋์ด์ผํ๋ค (31์ผ์ด ๋๋ฉด ์๋๋ค)
- 3๊ฐ ์ผ์ด์ค๋ก ๋ถ๋ฆฌํ๊ณ ๋ณด๋ 2์ 28์ผ์ด ๋น ์ก๋ค๋ ๊ฒ ์ธ์ ๊ฐ๋ฅ โ 4๋ฒ์งธ ํ
์คํธ ์ผ์ด์ค ์ถ๊ฐ ํ์
- ๊ฐ๋
๋น assert๋ฌธ ์๋ฅผ ์ต์๋ก ์ค์ฌ์ผ ํ๋ค
- ํ
์คํธ ํจ์ ํ๋๋ ๊ฐ๋
ํ๋๋ง ํ
์คํธ ํ๋ผ
F.I.R.S.T
Fast
- ํ
์คํธ๊ฐ ๋๋ฆฌ๋ฉด ์์ฃผ ๋๋ฆด ์๋๋ฅผ ๋ชป ๋ธ๋ค.
Independent
- ๊ฐ ํ
์คํธ๋ ์๋ก ์์กดํ๋ฉด ์๋๋ค
- ์ด๋ค ์์๋ก ์คํํด๋ ๊ด์ฐฎ์์ผ ํ๋ค
Repeatable
- ์ด๋ค ํ๊ฒฝ์์๋ ๋ฐ๋ณต ๊ฐ๋ฅํด์ผ ํ๋ค.
Self-Validating
- ํ
์คํธ๋ bool ๋ก์ ์ฑ๊ณต ํ๋๋ฉด ์คํจ๋ฅผ ์๋ ค์ผํ๋ค.
- ๋ถ์์ ์ผ๋ก ๋ก๊ทธ๋ฅผ ์ฝ๋ ์๊ฐ์ ๋ค์ด๊ฒ ํด์๋ ์๋๋ค.
Timely
- ๋จ์ ํ
์คํธ๋ ํ
์คํธํ๋ ค๋ ์ค์ ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ง์ ์ ๊ตฌํํ๋ค.
- ์ค์ ์ฝ๋ ๊ตฌํ ์ดํ์ ํ
์คํธ์ฝ๋๋ฅผ ๋ง๋ค๋ฉด ํ
์คํธ๊ฐ ์ด๋ ต๋ค๋ฉฐ ๋ฏธ๋ฃจ๊ฒ ๋
๐คย ๋ ์ค๋ฅด๋ ์๊ฐ
- ํ์
๋ณด๋ค๋ ๊ฐ์ธ ๊ฐ๋ฐ์ ๋น์ค์ด ๋๋ค๋ณด๋ ํ
์คํธ ์ฝ๋๋ฅผ ๋ฏธ๋ฃจ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ํ ๋ฒ ๋ฏธ๋ฃจ๊ณ ์ค์ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๋ฉด ๋์ค์๋ ํ
์คํธ ์ฝ๋๋ฅผ ์งค ์ผ์ด ๊ฑฐ์ ์๊ฒ ๋๋ค. ํญ์ ํ ํ๋ก์ ํธ ๋ผ๊ณ ๊ฐ์ ํ๊ณ ํ
์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๋ ์ต๊ด์ ๋ค์ด์
๐ย ์ง๋ฌธ
๐ย ์๊ฐ 3์ค ์์ฝ
- ๊ฐ๋
๋น assert๋ฌธ ์๋ฅผ ์ต์๋ก ์ค์ด์
- ํ
์คํธ ํจ์ ํ๋๋ ๊ฐ๋
ํ๋๋ง ํ
์คํธ
- ํ
์คํธ๋ Fast, Independent, Repeatable, Self-Validating, Timely ํด์ผํ๋ค