๐ ์๋ฐ์ JUnit์ ํ์ฉํ ์ค์ฉ์ฃผ์ ๋จ์ ํ ์คํธ ๋ฆฌ๋ทฐ
๐ ๋์ ๋ชฉ์ฐจ
๋์์ ์ธ์ธํ ๋ด์ฉ์ ์ ์ธํ ์ฑํฐ ๋ฐ ๊ฐ ์ฅ์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1๋ถ ๋จ์ ํ ์คํธ์ ๊ธฐ์ด
- 1์ฅ, ์ฒซ ๋ฒ์งธ JUnit ํ ์คํธ ๋ง๋ค๊ธฐ
- 2์ฅ, JUnit ์ง์ง๋ก ์จ ๋ณด๊ธฐ
- 3์ฅ, JUnit ๋จ์ธ ๊น๊ฒ ํ๊ธฐ
- 4์ฅ, ํ ์คํธ ์กฐ์ง
2๋ถ ๋น ๋ฅธ ์๊ธฐ๋ฒ ์ต๋
- 5์ฅ, ์ข์ ํ ์คํธ์ FIRST ์์ฑ
- 6์ฅ, Right-BICEP: ๋ฌด์์ ํ ์คํธํ ๊ฒ์ธ๊ฐ?
- 7์ฅ, ๊ฒฝ๊ณ ์กฐ๊ฑด: CORRECT ๊ธฐ์ต๋ฒ
3๋ถ ๋ ํฐ ์ค๊ณ ๊ทธ๋ฆผ
- 8์ฅ, ๊น๋ํ ์ฝ๋๋ก ๋ฆฌํฉํ ๋งํ๊ธฐ
- 9์ฅ, ๋ ํฐ ์ค๊ณ ๋ฌธ์
- 10์ฅ, ๋ชฉ ๊ฐ์ฒด ์ฌ์ฉ
- 11์ฅ, ํ ์คํธ ๋ฆฌํฉํ ๋ง
4๋ถ ๋ ํฐ ๋จ์ ํ ์คํธ ๊ทธ๋ฆผ
- 12์ฅ, ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ
- 13์ฅ, ๊น๋ค๋ก์ด ํ ์คํธ
- 14์ฅ, ํ๋ก์ ํธ์์ ํ ์คํธ
๐ ๋์ Tips
์๋ ๋ด์ฉ๋ค์ ๋์์์ ๊ฐ ์ฅ๋ง๋ค Tip์ผ๋ก ์ค๋ช ํ ๋ถ๋ถ๋ค์ ๋ํด ์ผ๋ถ ์ ๋ฆฌํ์์ต๋๋ค.
์ ๋ถ ๋ค ์์ฑํ์ง๋ ์์์ผ๋ ๊ฐ์ธ์ ์ผ๋ก ๋๋ถ๋ถ ๋์์ด ๋์๋ ๋ฌธ์ฅ๋ค์ด๋ผ ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
- ์ถํ์ ํ ์คํธ๋ฅผ ๋ ๋จ์ํ๊ฒ ์์ฑํ ์ ์๋๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฆฌํ์ธ์.(56p)
- ์ฌ๋ฌ๋ถ์ด ๊ฒฌ๋ ์ ์๋ ๋งํผ ๋ง์ ํ ์คํธ๋ฅผ ์คํํ์ธ์(95p)
- ์ข์ ํ ์คํธ์ ์กฐ๊ฑด: FIRST(100p)
- ๋ฌด์์ ํ ์คํธํ ๊ฒ์ธ๊ฐ? RIGHT-BICEP(120p)
- ๋ชจ๋ ์ฑ๋ฅ ์ต์ ํ ์๋๋ ์ค์ ๋ฐ์ดํฐ๋ก ํด์ผ ํ๋ฉฐ ์ถ์ธก์ ๊ธฐ๋ฐ์ผ๋ก ํด์๋ ์ ๋ฉ๋๋ค.(137p)
- ๊น๋ํ ์ค๊ณ๋ ์ต์ ํ๋ฅผ ์ํ ์ต์ ์ ์ค๋น์ ๋๋ค.(179p)
- ์์คํ ์ค๊ณ ๋ฐ ์ฝ๋ ํ์ง์ด ๋ฎ์์ง์๋ก ๋จ์ ํ ์คํธ์ ์ ์ง ๋ณด์ ๋น์ฉ์ ์ฆ๊ฐํฉ๋๋ค.(195p)
- ์ค๊ณ๋ฅผ ์ง์์ ์ผ๋ก ๊ฐ์ ํด ๋๊ฐ๋ ์์ ๊ฐ์ ํค์ฐ๊ธฐ ์ํด ๋จ์ ํ ์คํธ์ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋์ด์ธ์.(202p)
- ๋ชฉ์ ๋จ์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง์ ๊ตฌ๋ฉ์ ๋ง๋ญ๋๋ค. ํตํฉ ํ ์คํธ๋ฅผ ์์ฑํ์ฌ ์ด ๊ตฌ๋ฉ์ ๋ง์ผ์ธ์.(222p)
- ์ข์ ํ ์คํธ๋ ๋ ์๊ฐ ํ ์คํธ๋ฅผ ์ดํดํ๋ ๋ฐ ๋ค๋ฅธ ํจ์๋ฅผ ํํค์น์ง ์๋๋ก ํฉ๋๋ค.(240p)
- TDD๋ฅผ ํ ๋ ๊ฐ๋น์ธ๊ณ ๋์ ๊ฐ์ ๋ค์ ํผํ๊ธฐ ์ํด ํญ์ ํ ์คํธ๊ฐ ๋จผ์ ์คํจํ๋์ง ๊ด์ฐฐํ์ธ์(252p)
- ํตํฉ ํ ์คํธ๋ ํ์์ ์ด์ง๋ง ์ค๊ณํ๊ณ ์ ์ง ๋ณด์ํ๊ธฐ๊ฐ ๊น๋ค๋กญ์ต๋๋ค. ๋จ์ ํ ์คํธ์์ ๊ฒ์ฆํ๋ ๋ก์ง์ ์ต๋ํํ๋ ๋ฐฉํฅ์ผ๋ก ํตํฉ ํ ์คํธ ๊ฐ์์ ๋ณต์ก๋๋ฅผ ์ต์ํํ์ธ์.(293p)
- CI ์๋ฒ๋ ํ๋ ๊ฐ๋ฐ ํ์ ๊ตฌ์ฑํ๋ ์ต์ ์๊ฑด์ ๋๋ค.(307p)
- ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ ์ฝ๋๊ฐ ์ด๋์์ ์ปค๋ฒ๋ฆฌ์ง๊ฐ ๋ถ์กฑํ์ง, ํ์ด ์ด๋์์ ์๋ ๋ฐฉํฅ์ผ๋ก ๋ด๋ ค๊ฐ๊ณ ์๋์ง ์ดํดํ๋ ค๊ณ ํ ๋๋ง ์ฌ์ฉํ์ธ์.(312p)
๐ ๋์ ๋ฆฌ๋ทฐ
ํด๋น ๋์๋ ์ ๋ชฉ์ฒ๋ผ Java์์์ ๋จ์ ํ ์คํธ๋ฅผ ์์ฃผ๋ก ์ค๋ช ํ๊ณ ์์ต๋๋ค. ์ ์๊ฐ ๋งํ๋ ๋์ ๋ ์๋ "๋จ์ ํ ์คํธ๊ฐ ์ฒ์์ธ ์๋ฐ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋น ๋ฅด๊ฒ ์ ๋ฌธํ๋ ๊ฒ"์ ๋ชฉํ๋ก ํ๊ณ ์์ต๋๋ค. ์ ๋ ๋์๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ์์๋๋ก ์ฝ์์ง๋ง, ๋จ์ ํ ์คํธ๋ฅผ ์กฐ๊ธ์ด๋ผ๋ ์์ฑํด๋ณด์๊ฑฐ๋ ์ต์ํ์ ๋ถ์ด๋ผ๋ฉด ์ด์๋ ๋ค๋ฅด๊ฒ ๋ณธ์ธ์ด ํ์ํ ๋ถ๋ถ์ ๋ํด์๋ง ์ง์ค์ ์ผ๋ก ๋ณด๋ ์ ๋ต๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค.
ํด๋น ๋์๋ JUnit4 ๋ฒ์ ์ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ์ ์ต์ ๋ฒ์ ์ธ JUni5๊ณผ๋ ๋ค๋ฅธ ๋ฌธ๋ฒ๋ค์ด ๋ช๋ช ์กด์ฌํ๊ธฐ๋ ํ๋๋ฐ์, ๊ฐ์ธ์ ์ผ๋ก๋ JUnit5 ๋ฒ์ ์ผ๋ก ์ฑ ์ด ์์ฑ๋์์ผ๋ฉด ์ด๋จ๊น ํ๋ ์๊ฐ์ด๊ธด ํฉ๋๋ค.๐
๋ํ ์ ๋ ์๋ ์ด์ฏค๋ถํฐ ํ ์คํธ ์ฝ๋์ ๋ํด ์๊ฒ๋์๊ณ ์์ฑํ๊ณ ์๋๋ฐ์, ๊ทธ๋ ๊ธฐ์ JUnit4 ๋ฒ์ ์์ ๊ฐ์ฅ ์ ๊ธฐํ๋ ์ ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ๋ ๋ถ๋ถ์ด์์ต๋๋ค.
์๋๋ ๊ฐ๊ฐ JUnit4์ JUnit5์์ @Test ์ด๋ ธํ ์ด์ ์ฝ๋์ ๋๋ค.
JUnit4์๋ ์ด๋ ธํ ์ด์ ์ expected()๋ผ๋ ํจ์๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์, ์ด๋ ธํ ์ด์ ์ ์์ธ ํด๋์ค๋ฅผ ์ถ๊ฐํ์ฌ ํ ์คํธ ํ ์ ์์ต๋๋ค.
// JUnit4
@Test(expected=InsufficientFundsException.class)
public void throwsWhenWithdrawingTooMuch() {
account.withdraw(100);
}
// JUnit5
@Test
void throwsWhenWithdrawingTooMuch() {
assertThrows(InsufficientFundsException.class, () -> account.withdraw(100));
}
๊ฐ์ธ์ ์ธ ์๊ฐ์ผ๋ก๋ JUnit4 ๋ฒ์ ์ ์์ธ ์ฒ๋ฆฌ ํ ์คํธ ์ฝ๋๊ฐ ๋ ๊ฐ๋จํ์ง ์๋?๋ ์๊ฐ์ด ๋๋ค์. ๐ค
์ ๋ด์ฉ ์ธ์๋ ์ข์ ํ ์คํธ์ ์์ฑ์ธ FIRST, ๋ฌด์์ ํ ์คํธ ํ ์ง์ ๋ํ Right-BICEP ์ ์ ๋ฑ์ ๋ํด์๋ ๋ค๋ฃจ๊ณ ์์ด ๋ค์ ํ๋ฒ ์ง๊ณ ๊ฐ๊ธฐ์ ์ข์ ๋จ๋ฝ์ด์์ต๋๋ค.
FIRST
- Fast: ๋น ๋ฅธ
- Isolated: ๊ณ ๋ฆฝ๋
- Repeatable: ๋ฐ๋ณต ๊ฐ๋ฅํ
- Self-validationg: ์ค์ค๋ก ๊ฒ์ฆ ๊ฐ๋ฅํ
- Timely: ์ ์์
Right-BICEP
- Right: ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฐ๋ฅธ๊ฐ?
- B: ๊ฒฝ๊ณ ์กฐ๊ฑด์ ๋ง๋๊ฐ?
- I: ์ญ ๊ด๊ณ๋ฅผ ๊ฒ์ฌํ ์ ์๋๊ฐ?
- C: ๋ค๋ฅธ ์๋จ์ ํ์ฉํ์ฌ ๊ต์ฐจ ๊ฒ์ฌํ ์ ์๋๊ฐ?
- E: ์ค๋ฅ ์กฐ๊ฑด์ ๊ฐ์ ๋ก ์ผ์ด๋๊ฒ ํ ์ ์๋๊ฐ?
- P: ์ฑ๋ฅ ์กฐ๊ฑด์ ๊ธฐ์ค์ ๋ถํฉํ๋๊ฐ?
๊ทธ ๋ค์์ผ๋ก๋ ์ค๊ณ์ ๋ฆฌํฉํ ๋ง์ ์ธก๋ฉด์์ ํ ์คํธ ์ฝ๋์ ์ค์์ฑ์ ๋ํด ์ดํด๋ณด๊ณ , ์ง์ ๋ฆฌํฉํ ๋ง์ ์งํํ๋ฉฐ ์ฝ๋ ์์ค์ผ๋ก ์ค๋ช ํ๊ธฐ ๋๋ฌธ์ ํ ์คํธ ์ฝ๋์ ์ค์์ฑ์ ๋ํด ๋ค์ ํ ๋ฒ ๋๋ ์ ์์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก๋ ๋ชฉ(Mock) ์ฌ์ฉ๊ณผ TDD์ ๋ํ ๊ฐ๋ ์ ์ ๋ฐ ๋ฉํฐ ์ค๋ ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ์ ๊น๋ค๋ก์ด ํ ์คํธ, ์ค์ ํ๋ก์ ํธ์์ ํ ๋จ์์ ํ ์คํธ ๋ฑ์ ๋ํด ๋ค๋ฃจ๊ณ ์๋๋ฐ์, ํ ๋จ์์์ ๋จ์ ํ ์คํธ์ ๋ํด ๋ง ๋์ ํ๊ธฐ ์์ํ๋ค๋ฉด ๋ง์ง๋ง ๋จ์์ธ "14์ฅ, ํ๋ก์ ํธ์์ ํ ์คํธ"์ ๋ด์ฉ์ ๋ง์ ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋์ ํ ์คํธ ์ฝ๋์ ๋ํด์๋ ๋์๋ ๊ฐ์์์ด ์ผํ์ฑ(?)์ผ๋ก๋ง ํ์ตํ๊ณ ์ ์ฉ์ ํ๋ค๋ณด๋ ์ด๋์ ๋ ์ฝ์ง์ ํตํด ํ์ต์ ํ ๊ฒ ๊ฐ์ต๋๋ค.
๋ง์ฝ ์ฒ์๋ถํฐ ์ด๋ฌํ ๊ธฐ๋ณธ ๋์๋ฅผ ์ฝ๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด ์ด๋ ์๊น? ํ๋ ์๊ฐ์ด ๋ค๊ธด ํฉ๋๋ค. ๐
๋ง์ง๋ง์ผ๋ก ํฅ๋ฏธ๋กญ๊ฒ ๋ณด์๋ ์์์ ํ๋ ํฌ์ฒํ๋ฉฐ ๋ง๋ฌด๋ฆฌํ๊ฒ ์ต๋๋ค!
'๋์ ๋ฆฌ๋ทฐ > IT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
"์ค๋ฌด๋ก ํตํ๋ ํด๋ฆฐ ์ฝ๋" ๋์ ๋ฆฌ๋ทฐ (1) | 2024.08.26 |
---|---|
์ผํธ ๋ฐฑ์ Tidy First? ๋์ ๋ฆฌ๋ทฐ (2) | 2024.05.25 |
[IT] ๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด (0) | 2021.01.31 |
๋๊ธ