15์ฅ: Testing
Spring ํ ์คํธ ๊ธฐ๋ฒ 2๊ฐ์ง
๋จ์ ํ ์คํธ(Unit Test) ํน์ ๋ฉ์๋์ ๋ ผ๋ฆฌ๋ฅผ ๊ฒ์ฆํ๋ ํ ์คํธ ๋น ๋ฅด๊ฒ ์คํ๋๋ฉฐ, ์งง๊ณ ๊ฐ๊ฒฐํ ์ฝ๋๋ก ์์ฑ ์์กด์ฑ์ ์ ๊ฑฐํ๊ณ ํน์ ๊ธฐ๋ฅ๋ง ๊ฒ์ฆ
Spring ํตํฉ ํ ์คํธ(Integration Test) ํน์ ๋ฉ์๋์ ๋ ผ๋ฆฌ๋ฟ๋ง ์๋๋ผ Spring ํ๋ ์์ํฌ์์ ํตํฉ๊น์ง ๊ฒ์ฆ ์๋ฅผ ๋ค์ด, Spring์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ๊ธฐ๋ฅ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋์ง ํ์ธ ์์กด์ฑ์ ํฌํจํ ์ ์ฒด ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ์๋ํ๋์ง ํ ์คํธ
๋จ์ ํ ์คํธ๋? ํน์ ์ ์ฆ ์ผ์ด์ค๋ฅผ ํน์ ์กฐ๊ฑด์์ ์คํํ๊ณ , ๊ธฐ๋ํ๋ ๋์์ ๊ฒ์ฆํ๋ ๋ฉ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ๋์ํ๋์ง ํ์ธ ์์กด์ฑ์ ๋ชจ๋ ์ ๊ฑฐํ์ฌ ํน์ ๋ก์ง๋ง ๋ ๋ฆฝ์ ์ผ๋ก ๊ฒ์ฆ
๋จ์ํ ์คํธ๋ ์ธ ๊ฐ์ง ์ฃผ์ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
๊ฐ์ ํ ์คํธํ ๋ก์ง์ด ํน์ ๋ฐฉ์์ผ๋ก ๋์ํ๋๋ก ์ ๋ ฅ๊ฐ๊ณผ ์์กด์ฑ์ ์ ์
์คํ ํ ์คํธํ ๋ฉ์๋๋ฅผ ์คํ
๊ฒ์ฆ ๊ธฐ๋ํ ๋๋ก ๋์ํ๋์ง ๊ฒ์ฆ
์ ์ฆ ์ผ์ด์ค๋ฅผ ํ ์คํธํ ๋ ํด๋น ๋ฉ์๋๊ฐ ์์ฑํ์ง ์๋ ์ธ๋ถ ๊ฐ์ฒด๋ ๋ชจ๋ ์์กด์ฑ์ด๋ค. ๋จ์ ํ ์คํธ๋ ํน์ ๋ก์ง๋ง ๊ฒ์ฆํด์ผ ํ๋ฏ๋ก ์ธ๋ถ ๊ฐ์ฒด๋ฅผ ํ ์คํธํ์ง ๋ชปํ๋ค. ์ด๋ฅผ ์ํด์ ๊ฐ์ง ๊ฐ์ฒด(Mock)๋ฅผ ๋ง๋ค์ด์ ํน์ ๋์์ ์ ๋ํ๋ค.
@Mock๋ก ๊ฐ์ง๊ฐ์ฒด์์ ์๋ฆฌ๋ฉด @InjectMock ์ฃผ์์ ๊ฐ์ฒด๋ @Mock๊ฐ ๋ถ์ ๊ฐ์ฒด๋ค์ ์ฃผ์ ๋นํ๋ค. ์ด๋ฅผ ์ํด์ ํ ์คํธ ํด๋์ค์์ @ExtendWith ์ฃผ์์ ๋ถ์ฌ์ผ ํ๋ค. ์ด๋ค์ ธ์ผํ๋ ํ๋ฆ์ given-willReturn๋ฅผ ์ด์ฉํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ช ๋ นํ ์ ์๋ค. ์์ธ ํ๋ฆ์ assertThrows๋ก ๊ฒ์ฆ. verify๋ก ์์๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆ.
ํตํฉํ ์คํธ๋? ์ ๋ํ ์คํธ์ ๋งค์ฐ ์ ์ฌํ๋ค. ์ฌ์ ํ JUnit์ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ์์ฑํ์ง๋ง, ์ ๋ ํ ์คํธ๋ ํน์ ์ปดํฌ๋ํธ์ ๋์์ ์ง์คํ๋ ๋ฐ๋ฉด, ํตํฉ ํ ์คํธ๋ ๋ ๊ฐ ์ด์์ ์ปดํฌ๋ํธ๊ฐ ์ด๋ป๊ฒ ์ํธ์์ฉํ๋์ง์ ์ด์ ์ ๋ง์ถฅ๋๋ค. ์ฑ์์๋ ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์๋ํ๋๋ผ๋ ์๋ก ์ฌ๋ฐ๋ฅด๊ฒ "๋ํ"ํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋ค. ํตํฉํ ์คํธ๋ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ๋๋ฐ ๋์์ ์ค๋ค.
์ด๋ค ํตํฉ์ ํ ์คํธํ๋๊ฐ?
์ฑ์ ๋ ๊ฐ ์ด์์ ๊ฐ์ฒด ๊ฐ์ ํตํฉ
์ฑ ๊ฐ์ฒด์ ํ๋ ์์ํฌ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ๊ณผ์ ํตํฉ
์ฑ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ํตํฉ
ํตํฉ ํ ์คํธ์ ๊ตฌ์ฑ ์ ๋ํ ์คํธ์ ์ ์ฌํ๊ฒ ๊ตฌ์ฑ๋๋ค.
๊ฐ์
๋ฉ์๋ ํธ์ถ
๊ฒ์ฆ
์ ๋ํ ์คํธ์์๋ ๋ณดํต ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ชจํนํ์ง๋ง, ํตํฉํ ์คํธ์์๋ ์ผ๋ถ ์ปดํฌ๋ํธ๋ ์ค์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด๋ ๋๋ค. @MockBean์ ์ฌ์ฉํ๋ฉด Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ์์ mock ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ์ถ๊ฐํ ์ ์๋ค. ์ด ๋ฐฉ์์ ๊ฐ์ฒด์ ์ค์ ๋์์ ๊ฒ์ฆํ๋ฉด์ Spring์ด ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ค๊ณผ์ ์ํธ์์ฉ๋ ํ์ธํ ์ ์๊ฒ ํ๋ค.
Last updated