
1. ์ํํธ์จ์ด ํ ์คํ
์ํํธ์จ์ด ์์คํ ์ด ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๊ณ ์์๋ ๋์์ ์ํํ๋์ง ํ์ธํ๊ธฐ ์ํ ๊ณผ์ ์ด๋ค.
์ํํธ์จ์ด ํ ์คํธ๋ ๊ฐ๋ฐ ์ฃผ๊ธฐ์ ์ผ๋ถ๋ก์, ๋ฒ๊ทธ๋ฅผ ์ฐพ๊ณ ์์ ํ๋ฉฐ, ์ํํธ์จ์ด์ ํ์ง์ ํฅ์์ํค๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค.
๋ชฉํ๋ ์ ๋ขฐ์ฑ ๋์ ์ํํธ์จ์ด๋ฅผ ์ ๊ณตํ์ฌ ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑ์ํค๋ ๊ฒ์ด๋ค.
ํ ์คํ ๋ ๋ฒจ
๋จ์ ํ
์คํธ(Unit Testing): ์ํํธ์จ์ด์ ๊ฐ์ฅ ์์ ๋จ์์ธ ๋ชจ๋ ๋๋ ํจ์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ํ
์คํธํ๋ ๊ฒ. ์ฃผ๋ก ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฒด์ ์ผ๋ก ์ํํ๋ฉฐ, ๋ชจ๋์ ๋
๋ฆฝ์ฑ์ ํ์ธํ๊ณ ์์๋ ๋์์ ๊ฒ์ฆํ๋ค.
ํตํฉ ํ
์คํธ(Integration Testing): ๋จ์ ํ
์คํธ์์ ๊ฐ๋ณ์ ์ผ๋ก ํ
์คํธํ ๋ชจ๋๋ค์ ํตํฉํ์ฌ ์ ์ฒด ์์คํ
์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ํธ์์ฉํ๋์ง ๊ฒ์ฆํ๋ ๊ฒ. ๋ค์ํ ์ปดํฌ๋ํธ ๊ฐ์ ์ํธ์์ฉ, ์ธํฐํ์ด์ค ๋ฌธ์ , ๋ฐ์ดํฐ ํ๋ฆ ๋ฑ์ ํ์ธํ๋ค.
์์คํ
ํ
์คํธ(System Testing): ์์ ํ ์ํํธ์จ์ด ์์คํ
์ ๋์์ผ๋ก ์ํ๋๋ ํ
์คํธ. ์์คํ
์ ๊ธฐ๋ฅ, ์ฑ๋ฅ, ์์ ์ฑ, ๋ณด์ ๋ฑ ๋ค์ํ ์ธก๋ฉด์ ํ๊ฐํ์ฌ ์์คํ
์ด ์๊ตฌ์ฌํญ์ ์ถฉ์กฑ์ํค๊ณ ์์๋ ๋์์ ์ํํ๋์ง ํ์ธํ๋ค. ์ด ๋จ๊ณ์์๋ ์ฃผ๋ก ๊ฐ๋ฐ์, ํ
์คํธ ์์ง๋์ด ๋๋ QA(Quality Assurance) ํ์ด ์์คํ
์ ํ
์คํธํ๋ฉฐ, ์ํํธ์จ์ด์ ํ์ง์ ๊ฒ์ฆํ๊ณ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ๊ณ ์์ ํ๋ค.
์ธ์ ํ
์คํธ(Acceptance Testing): ์ฌ์ฉ์ ๋๋ ๊ณ ๊ฐ์ด ์๊ตฌ์ฌํญ์ ์ถฉ์กฑ์ํค๋์ง ํ์ธํ๊ธฐ ์ํด ์ํ๋๋ ํ
์คํธ. ์์คํ
์ด ์ค์ ํ๊ฒฝ์์ ์ ์์ ์ผ๋ก ์๋ํ๋์ง ํ์ธํ๊ณ ์ฌ์ฉ์์ ์น์ธ์ ๋ฐ๊ธฐ ์ํด ์ํํ๋ค. ์ฃผ๋ก ๊ณ ๊ฐ, ์ต์ข
์ฌ์ฉ์, ์๋ ์ ์ ๋ฑ์ด ์์คํ
์ ์ฌ์ฉํ์ฌ ์ค์ ์
๋ฌด๋ฅผ ์ํํ๋ฉฐ ํ๊ฐํ๋ค.
Testing Pyramid
์ํํธ์จ์ด ํ ์คํ ์์ ํ ์คํธ์ ์ข ๋ฅ์ ์ํ ๋น์จ์ ๋ํ๋ด๋ ๊ฐ๋

ํผ๋ผ๋ฏธ๋์ ๊ณ์ธต์ ํตํด ์๋ก ์ด๋ํ๋ฉด ํ ์คํธ ๋ฒ์๊ฐ ์ฆ๊ฐํ๊ณ ์์ฑํด์ผ ํ๋ ํ ์คํธ ์๊ฐ ๊ฐ์ํ๋ค.
2. ๋จ์ ํ ์คํธ (Unit Test)
๋จ์ํ ์คํธ๋?

๋ณ์๋ฅผ ์ค์ ํ๊ณ ๋ฉ์๋๋ฅผ ํตํด return value๋ฅผ ํ์ธํ์ฌ ์์ํ๋๋ก ๋์ํ์๋์ง ํ์ธํ๋ค.
๐ก SUT (System Under Test)
ํ ์คํธ์ ๋์์ด ๋๋ ์์คํ ๋๋ ์ํํธ์จ์ด ๊ตฌ์ฑ ์์, ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธ๋ ์ ์๋ ์ต์ํ์ ๊ธฐ๋ฅ ๋จ์ (๋ณดํต class)
๋จ์ํ ์คํธ๋ฅผ ์ํํ ๋๋ SUT๋ฅผ ์ ํํ๊ฒ ๋ถ๋ฆฌํ๊ณ , ๊ทธ ์ฝ๋๋ ๊ธฐ๋ฅ์ ๋ํ ํ ์คํธ๋ฅผ ์งํํ๋ค.
SUT๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธ๋จ์ผ๋ก์จ ํด๋น ์ฝ๋์ ๋์๊ณผ ์ ํ์ฑ์ ํ์ธํ๊ณ ๊ฒ์ฆํ ์ ์๋ค.
์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์์ ๋จ์์ ์ฝ๋๋ฅผ ๊ฒฌ๊ณ ํ๊ฒ ๋ง๋ค๊ณ , ์ ์ฒด ์์คํ ์ ์์ ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ ํฅ์์ํฌ ์ ์๋ค.
๋จ์ํ ์คํธ๋ฅผ ์ฌ์ฉํ๋ ์ด์
๊ฒฐํจ ์๋ณ: ๋จ์ ํ ์คํธ๋ ์ฝ๋์ ์์ ๋ถ๋ถ์ ํ ์คํธํ๋ฏ๋ก ๊ฒฐํจ์ ์๋ณํ๊ธฐ์ ์ฉ์ดํ๋ค. ํน์ ํจ์ ๋๋ ๋ชจ๋์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ๋จ์ ํ ์คํธ๋ฅผ ํตํด ๊ฒฐํจ์ ์ฝ๊ฒ ์ถ์ ํ๊ณ ์์ ํ ์ ์๋ค.
์ฝ๋ ํ์ง ๊ฐ์ : ํ
์คํธ ๊ฐ๋ฅํ ์ฝ๋ ์์ฑ์ ์ฅ๋ คํ๋ฉฐ, ๋ชจ๋ํ์ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ์ด์งํ๋ค. ์ด๋ ์ฝ๋์ ๊ฐ๋
์ฑ, ์ ์ง ๋ณด์์ฑ ๋ฐ ์ฌ์ฌ์ฉ์ฑ์ ํฅ์์ํต๋๋ค.
๋ฆฌํฉํ ๋ง ์ง์: ์ฝ๋๋ฅผ ์์ ํ๊ณ ๊ฐ์ ํ ๋ ๋จ์ ํ
์คํธ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ํฅ์ ๋ฏธ์น์ง ์์๋์ง ํ์ธํ๋ ๋ฐ ๋์์ด ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋ ๋ฆฌํฉํ ๋ง์ ์์ ์ฑ์ ๋ณด์ฅํ๊ณ ๊ธฐ๋ฅ์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
๋ฌธ์ํ: ์ฝ๋์ ๋์์ ๋ฌธ์ํํ๋ ์ญํ ์ ํ๋ค. ํ
์คํธ ์ผ์ด์ค๋ ์ฝ๋์ ์์ ๋์์ ์ค๋ช
ํ๊ณ , ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ ๋ฐ ์ฌ์ฉ ์์ ๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ ํ ๋ด๋ถ ๋ฐ ์ธ๋ถ์์ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉํ๋ ๋ฐ ๋์์ด ๋๋ค.
๊ฐ๋ฐ ์์ฐ์ฑ ํฅ์: ํ
์คํธ ์ฃผ๋ ๊ฐ๋ฐ(Test-Driven Development, TDD) ๋ฐฉ๋ฒ๋ก ์ ์ฌ์ฉํ๋ฉด ํ
์คํธ๋ฅผ ๋จผ์ ์์ฑํ๊ณ ๊ทธ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ผ ์ ์๋ค. ๋ํ, ๋จ์ ํ
์คํธ๋ ๋ฒ๊ทธ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐ๊ฒฌํ์ฌ ๋๋ฒ๊น
์๊ฐ์ ์ค์ด๊ณ ์์ ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋๋ค.
ํ ์คํธ ๋๋ธ
์ํํธ์จ์ด ํ ์คํธ์์ ์ค์ ์์กด์ฑ์ ๋์ฒดํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฐ์ฒด
์ค์ ์์กด์ฑ์ด ํ ์คํธ์ ์ด๋ ค์์ ์ค ์ ์๋ ๊ฒฝ์ฐ, ํ ์คํธ ๋๋ธ์ ์ฌ์ฉํ์ฌ ์์กด์ฑ์ ๋์ฒดํ๊ณ ํ ์คํธ์ ๊ฒฉ๋ฆฌ์ฑ๊ณผ ์ ์ด ๊ฐ๋ฅ์ฑ์ ํฅ์์ํฌ ์ ์๋ค.
๐ Dummy
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํ ์คํธ ๋๋ธ
- ์ธ์คํด์คํ๋ ๊ฐ์ฒด๊ฐ ํ์ํ์ง๋ง ๊ธฐ๋ฅ์ ํ์ํ์ง ์์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
- Dummy ๊ฐ์ฒด์ ๋ฉ์๋๊ฐ ํธ์ถ๋์์ ๋ ์ ์ ๋์์ ๋ณด์ฅํ์ง ์๋๋ค.
- ๊ฐ์ฒด๋ ์ ๋ฌ๋์ง๋ง ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด์ด๋ค.
- ์ฃผ๋ก ํ
์คํธ ์์ ํ์ํ ํ๋ ฅ ๊ฐ์ฒด(Collaborator)๋ก์ ์ฌ์ฉ๋๋ค.
๐ Fake
- ์ค์ ๊ตฌํ๊ณผ ์ ์ฌํ ๋์์ ๊ฐ๋ ๋จ์ํ ๊ตฌํ์ฒด
- ์ค์ ์์กด์ฑ์ ๋์ฒดํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ์ค์ ์์กด์ฑ๊ณผ ์ ์ฌํ ๋์์ ์ํํ์ง๋ง ๋จ์ํ๊ฒ ๊ตฌํ๋์ด ์๋ค.
๐ Stub
- ํ ์คํธ ์ค์ ํธ์ถ๋ ๋ ๋ฏธ๋ฆฌ ์ ์๋ ์๋ต์ ๋ฐํํ๋ ๊ฐ์ฒด์ ๋๋ค.
- ์ค์ ๋์์ ๊ตฌํํ์ง ์๊ณ ๋จ์ํ ์ ํด์ง ๊ฐ์ ๋ฐํํ์ฌ ์ํ๋ ์ํฉ์ ์๋ฎฌ๋ ์ด์
ํ๋ค.
๐ Spy
- Stub์ ์ญํ ์ ๊ฐ์ง๋ฉด์ ํธ์ถ๋ ๋ด์ฉ์ ๋ํด ์ฝ๊ฐ์ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๋ค.
- ํ
์คํธ ๋๋ธ๋ก ๊ตฌํ๋ ๊ฐ์ฒด์ ์๊ธฐ ์์ ์ด ํธ์ถ๋์์ ๋ ํ์ธ์ด ํ์ํ ๋ถ๋ถ์ ๊ธฐ๋กํ๋๋ก ๊ตฌํํ๋ค.
- ์ค์ ๊ฐ์ฒด์ฒ๋ผ ๋์์ํฌ ์๋ ์๊ณ , ํ์ํ ๋ถ๋ถ์ ๋ํด์๋ Stub๋ก ๋ง๋ค์ด์ ๋์์ ์ง์ ํ ์๋ ์๋ค.
๐ Mock
- ํธ์ถ์ ๋ํ ๊ธฐ๋๋ฅผ ๋ช
์ธํ๊ณ ๋ด์ฉ์ ๋ฐ๋ผ ๋์ํ๋๋ก ํ๋ก๊ทธ๋๋ฐ๋ ๊ฐ์ฒด์ด๋ค.
3. ํตํฉํ ์คํธ

๋ค๋ฅธ ์์กด๊ด๊ณ์ ์ฐ๋์ด ์ ๋๋์ง ํ ์คํธํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
4. JUnit
์๋ฐ ์ธ์ด๋ฅผ ์ํ ์ ๋ ํ ์คํ ํ๋ ์์ํฌ
JUnit์ ๊ธฐ๋ฅ
- ๋งค ๋จ์ ํ ์คํธ์๋ง๋ค ํ ์คํธ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด ๋ ๋ฆฝ์ ์ธ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ค.
-> ์ด์ ํ ์คํธ๊ฐ ๋ค์ ํ ์คํธ์ ์ํฅ์ ์ฃผ์ง ์์
- ์ ๋ ธํ ์ด์ ์ ์ ๊ณตํด์ ํ ์คํธ ๋ผ์ดํ ์ฌ์ดํด์ ๊ด๋ฆฌํ๊ฒ ํด ์ฃผ๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ๋๋ก ์ง์ํ๋ค. (ex. @BeforeEach, @AfterEach)
- ํ ์คํธ ๋ฌ๋๋ฅผ ์ ๊ณตํด์ ์ธํ ๋ฆฌ์ ์ด / ์ดํด๋ฆฝ์ค / ๋ฉ์ด๋ธ ๋ฑ์์ ํ ์คํธ ์ฝ๋๋ฅผ ์ฝ๊ฒ ์คํํ๊ฒ ํ๋ค.
- assert๋ก ํ ์คํธ ์ผ์ด์ค์ ์ํ ๊ฒฐ๊ณผ๋ฅผ ํ๋ณํ๋ค. (ex. assertEquals(์์ ๊ฐ, ์ค์ ๊ฐ))
- ๊ฒฐ๊ณผ๋ ์ฑ๊ณต(๋ น์), ์คํจ(๋ถ์์) ์ค ํ๋๋ก ํ์ํ๋ค.
Junit 4

junit.jar๋ผ๋ ๋จ์ผ jarํ์ผ๋ก ๋ฐฐํฌ๋์๋ค.
๋จ์ : ํ์ฅ์ฑ์ด ๋จ์ด์ง๋ค.
Junit5

3๊ฐ์ ๋ชจ๋๋ก ๋ถ๋ฆฌ๋์๋ค.

๐ JUnit Platform
- JVM ์์ ํ
์คํ
ํ๋ ์์ํฌ๋ฅผ ์คํํ๊ธฐ ์ํ ๊ธฐ๋ฐ์ ์ ๊ณตํ๋ค.
- TestEngine ์ธํฐํ์ด์ค๋ฅผ ํตํด ํ ์คํธ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ํ ์คํธ ๊ณํ์ ์์ฑํ๋ฉฐ, ์ด๋ฅผ ํตํด ํ ์คํธ๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ๋ค.
- ๋ค์ํ ํ ์คํธ ์์ง๊ณผ์ ํตํฉ์ ์ง์ํ๋ฉฐ, ํ ์คํธ ํ๋ ์์ํฌ์์ ์ฌ์ฉํ ์ ์๋ ์ผ๊ด๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ฅผ ํตํด ํ ์คํธ ํ๊ฒฝ์ ์๊ด์์ด JUnit ํ ์คํธ๋ฅผ ์คํํ๊ณ ํตํฉํ ์ ์๋ค.
+) TestEngine์ธํฐํ์ด์ค: JUnit Platform์์ ํ ์คํธ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์คํํ๋ ์ญํ ์ ๋ด๋นํ๋ ์ธํฐํ์ด์ค. ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํจ์ผ๋ก์จ ํน์ ํ ํ ์คํธ ์์ง๊ณผ JUnit Platform์ ํตํฉํ ์ ์๋ค.
๐ JUnit Jupiter
- TestEngine์ ์ค์ ๊ตฌํ์ฒด ์ค ํ๋
- JUnit 5์ ์ฃผ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ชจ๋
- jupiter-api๋ฅผ ์ฌ์ฉํด์ ์์ฑํ ํ ์คํธ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์คํํ๋ค.
- ์ ๋ํ ์ด์ ๊ธฐ๋ฐ์ ํ ์คํธ ์์ฑ์ ์ง์ํ๋ค. (ex. @Test, @BeforeEach, @AfterEach)
+) Jupiter API: JUnit 5์์ ์ฌ์ฉ๋๋ ํ ์คํธ ์์ฑ์ ์ํ API์ด๋ค. JUnit Jupiter ๋ชจ๋์์ ์ ๊ณต๋๋ฉฐ, ํ ์คํธ ํด๋์ค, ํ ์คํธ ๋ฉ์๋, ์ด์ค์ ๋ฑ์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๐JUnit Vintage
- ์ด์ ๋ฒ์ ์ JUnit ํ ์คํธ๋ฅผ JUnit 5 ํ๋ซํผ์์ ์คํํ ์ ์๋๋ก ์ง์ํ๋ ๋ชจ๋
- JUnit 3 ๋ฐ JUnit 4๋ก ์์ฑ๋ ๊ธฐ์กด์ ํ ์คํธ๋ฅผ JUnit 5 ํ๋ซํผ์์ ์คํํ ์ ์๋๋ก ๋ธ๋ฆฌ์ง ์ญํ ์ ์ํํ๋ค. ์ด๋ฅผ ํตํด ๊ธฐ์กด์ ํ ์คํธ ์ฝ๋๋ฅผ JUnit 5๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ฉด์๋ ํธํ์ฑ์ ์ ์งํ ์ ์๋ค.
- ๊ธฐ์กด์ JUnit 4 ๋ฒ์ ์ผ๋ก ์์ฑํ ํ
์คํธ ์ฝ๋๋ฅผ ์คํํ ๋์๋ vintage-engine ๋ชจ๋์ ์ฌ์ฉํ๋ค.
5. Junit5 ์ค์ต
ํ ์คํธ ํด๋์ค์ ๋ฉ์๋๋ return ํ์ ์ด ํญ์ void๋ค.
๋ค์ํ Junit5 Annotation
@Test: ํ ์คํธ ๋ฉ์๋์ ๋ถ์ฌ์ ํด๋น ๋ฉ์๋๊ฐ ํ ์คํธ ๋ฉ์๋์์ ํ์ํฉ๋๋ค.
@DisplayName: ํ ์คํธ ํด๋์ค ๋๋ ํ ์คํธ ๋ฉ์๋์ ์ฌ์ฉํ์ฌ ํด๋น ํ ์คํธ์ ์ด๋ฆ์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
@Disabled: ํด๋น ํ ์คํธ๋ฅผ ๋นํ์ฑํํ์ฌ ์คํ๋์ง ์๋๋ก ํ๋ค.
@BeforeAll: ํ ์คํธ ํด๋์ค ๋ด์์ ๋ชจ๋ ํ ์คํธ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ด์ ์ ๋ฑ ํ ๋ฒ ํธ์ถ๋๋ ๋ฉ์๋๋ฅผ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ํ ์คํธ ์ ์ ํ์ํ ์ค์ ์์ ์ ์ํํ ๋ ์ฌ์ฉ๋๋ค.
-> ํด๋น ๋ฉ์๋๋ static์ผ๋ก ์ ์ธ๋์ด์ผ ํ๋ฉฐ ์ด๋ค ๋ฆฌํด ๊ฐ๋ ๊ฐ์ ธ์๋ ์ ๋๋ค.
-> ํ ์คํธ ํด๋์ค๊ฐ ์ธ์คํด์คํ๋๊ธฐ ์ด์ ์ ์คํํด์ผ ๋๊ธฐ ๋๋ฌธ (static)
@BeforeEach: ๊ฐ๊ฐ์ ํ ์คํธ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ ์ ์คํ๋์ด์ผ ํ๋ ์ค์ ์ด๋ ์ด๊ธฐํ ์์ ์ ์ ์ํ ๋ ์ฌ์ฉ๋๋ค.
@AssertAll: ์ฌ๋ฌ ๊ฐ์ ๋จ์ธ๋ฌธ(assertion)์ ๊ทธ๋ฃนํํ์ฌ ๋ชจ๋ ์คํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ ๋ฒ์ ํ์ธํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
+) ํด๋น ๋ด์ฉ์ ๋ ์๊ณ ์ถ๋ค๋ฉด ํ๋จ ๋งํฌ ์ฐธ๊ณ
JUnit Jupiter, Hamcrest
๐ junit.jupiter.api.assertion
- JUnit Jupiter์์ ์ ๊ณตํ๋ ์ด์ค์
(assertion) ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ํจํค์ง
- ๋ค์ํ ์ด์ค์
(assertion) ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ฌ ํ
์คํธ ์ฝ๋์์ ์์ ๊ฒฐ๊ณผ์ ์ค์ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํ๊ณ ๊ฒ์ฆํ ์ ์๋ค.
- ex) assertEquals(), assertTrue(), assertNotNull()
assertEquals(2, 1 + 1);
๐org.hamcrest.matcher
- Hamcrest์์ ์ ๊ณตํ๋ ๋งค์ฒ(matcher) ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ํจํค์ง
- ๊ฐ๋
์ฑ๊ณผ ํํ๋ ฅ์ด ๋ฐ์ด๋๋ฉฐ, ๋ค์ํ ์กฐํฉ์ผ๋ก ์ฌ์ฉํ ์ ์์ด ํ
์คํธ ์ฝ๋๋ฅผ ๋์ฑ ๋ช
ํํ๊ณ ํํ๋ ฅ ์๊ฒ ๋ง๋ค์ด ์ค๋ค.
- ๋งค์ฒ(matcher)๋ ํ
์คํธ ์ฝ๋์์ ์์ ๊ฒฐ๊ณผ์ ์ค์ ๊ฒฐ๊ณผ๋ฅผ ๋งค์นญํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ์ปฌ๋ ์ ์ ์์ ํฌํจ ์ฌ๋ถ, ๋ฌธ์์ด ํจํด ์ผ์น ๋ฑ ๋ค์ํ ๋น๊ต์ ์กฐ๊ฑด์ ํํํ ์ ์๋ค.
- ex) equalTo(), containsString(), greaterThan()
assertThat(1 + 1, equalTo(2));
6. Mock Object (๋ชจ์ ๊ฐ์ฒด)

๐ Mock, Spy
- ํ์ ๊ฒ์ฆ(behavior verification)
- ๋ฉ์๋์ ๋ฆฌํด ๊ฐ์ผ๋ก ํ๋จํ ์ ์๋ ๊ฒฝ์ฐ, ํน์ ๋์์ ์ํํ๋์ง ํ์ธํ๋ค.
- ํน์ ๋ฉ์๋๊ฐ ํธ์ถ๋์๋์ง, ํธ์ถ๋ ํ์๊ฐ ์ฌ๋ฐ๋ฅธ์ง, ๋งค๊ฐ๋ณ์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฌ๋์๋์ง ๋ฑ์ ๊ฒ์ฆํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๐ Stub, dummy, fake
- ์ํ ๊ฒ์ฆ(state verification)
- ๋ฉ์๋๊ฐ ์ํ๋ ํ, ๊ฐ์ฒด์ ์ํ๋ฅผ ํ์ธํ์ฌ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋์ง๋ฅผ ํ์ธํ๋ค.
- ํน์ ์ํ๋ ๋์์ ๊ฐ์ง๋ ๋์ฒด ๊ฐ์ฒด๋ก ์ฌ์ฉ๋๋ค.
Mock Object ์์ฑ์ ๋์์ฃผ๋ Test Framework
- Mockito
- JMock
- EasyMock
7. Spring Test
์คํ๋ง ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ํ ์คํธ ์ง์ ๊ธฐ๋ฅ์ ๋ด๊ณ ์๋ ๋ชจ๋
์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ๋ ๋ฐ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ๊ณผ ์ ํธ๋ฆฌํฐ๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ํจ๊ณผ์ ์ผ๋ก ํ ์คํธ๋ฅผ ์์ฑํ๊ณ ์คํํ ์ ์๋๋ก ๋์์ค๋ค.
- ์คํ๋ง ํ
์คํธ ์ปจํ
์คํธ(TestContext) ๊ด๋ฆฌ: ํ
์คํธ ์คํ ์ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ๋ฅผ ๋ก๋ฉํ๊ณ ๊ด๋ฆฌํ๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ๋ฅผ ํ
์คํธ์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ํ
์คํธ์ฉ ๋น ์ฃผ์
๋ฐ ํ
์คํธ ํ๊ฒฝ ์ค์ ๋ฑ์ ์ง์ํ๋ค.
- ํ
์คํธ์ฉ ์ ๋ํ
์ด์
์ง์: @RunWith, @ContextConfiguration, @Transactional, @WebAppConfiguration ๋ฑ์ ์ ๋ํ
์ด์
์ ์ฌ์ฉํ์ฌ ํ
์คํธ๋ฅผ ์ค์ ํ๊ณ ์คํํ ์ ์๋ค.
- ์คํ๋ง MVC ํ
์คํธ: ์คํ๋ง MVC ์ปจํธ๋กค๋ฌ์ ํ
์คํธ๋ฅผ ์ง์ํ๋ค. MockMvc๋ฅผ ์ฌ์ฉํ์ฌ HTTP ์์ฒญ์ ๋ชจ์(mock)ํ๊ณ ์๋ต์ ๊ฒ์ฆํ ์ ์๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์คํธ: ํ
์คํธ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ ๋ฐ ํธ๋์ญ์
๊ด๋ฆฌ๋ฅผ ์ง์ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์คํธ๋ฅผ ๊ฐํธํ๊ฒ ์ํํ ์ ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ํ
์คํธ์์ ๋กค๋ฐฑ์ด๋ ์ปค๋ฐ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ค.
- ํ
์คํธ ๋ณด์กฐ ์ ํธ๋ฆฌํฐ: ํ
์คํธ๋ฅผ ์ํ ๋ค์ํ ์ ํธ๋ฆฌํฐ ํด๋์ค์ ์ด๋
ธํ
์ด์
์ ์ ๊ณตํ๋ค.
์๋ฅผ ๋ค์ด, TestPropertySource, @DirtiesContext, @Repeat, @Timeout ๋ฑ์ ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ ํ๊ฒฝ์ ์กฐ์ํ๊ฑฐ๋ ํ ์คํธ ์คํ ์๊ฐ์ ์ ์ดํ ์ ์๋ค.
Reference
Test Double์ ์์๋ณด์ - Tecoble
'๐๏ธ ํ๋ก๊ทธ๋๋จธ์ค ๋ฐ๋ธ์ฝ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| SpringBoot Part 3-1 (0) | 2023.07.06 |
|---|---|
| SpringBoot Part2-2 (0) | 2023.07.03 |
| SpringBoot Part1-5 (0) | 2023.06.26 |
| SpringBoot Part1-4 (0) | 2023.06.23 |
| SpringBoot Part1-3 (0) | 2023.06.22 |
๋๊ธ