Spring test
ํตํฉ ํ
์คํธ(Integration Test)
ํตํฉ ํ ์คํธ๋ ์ ์ฒด ๋ชจ๋์ด ํฉ์ณ์ก์ ๋ ์ ์์ ์ผ๋ก ์๋ํ๋ ์ง ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ด๋ฉฐ ๋จ๊ณ์ด๋ค.
๊ฐ ๋ชจ๋์ด๋ ์ ๋์ด ๋ณ๊ฐ๋ก๋ ์ ์์ ์ผ๋ก ์๋ํ๋๋ผ๋ ์๋ก ์ฐ๊ณ๋์ ๋๋ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ํ์ํ ํ ์คํธ๋ผ๊ณ ๋ณผ ์ ์๋ค.
@Autowired
@Autowired
@Autowired
๋ ๊ฐ์ฒด๋ฅผSpring container
์ ์ํด์ ์๋์ผ๋ก ์ฃผ์ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ์ํํ๊ฒ ํ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
@SpyBean
@SpyBean
@SpyBean
์Mock
๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ์คํ๋ง ๋น(Bean)์ ๊ฐ์ํ๊ณ ํ์๋ฅผ ๊ฒ์ฆํ ์ ์๋๋ก ๋์์ค๋ค.๋ณดํต
@MockBean
์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ํ ์คํธ์ฉ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ํตํด ํ ์คํธ๋ฅผ ์ํํ๋ค. ํ์ง๋ง ๋์ ๋ฐ๋ผ์๋ ์ค์ ๋น์ ์ฌ์ฉํด์ผ ํ๋ ์ํฉ๋ ์๋๋ฐ ์ด๋,@SpyBean
์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์ค์ ๋น์ ๊ฐ์ํ๋ฉด์ ํ ์คํธ๋ฅผ ์ํํ ์ ์๋ค.
MockMvc
MockMvc
๋ ์คํ๋ง ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ํ ์คํธ ํ๋ ์์ํฌ์ธ๋ฐ, ์ฃผ๋ก ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ API๋ฅผ ํ ์คํธ์ ์ฌ์ฉ๋๋ค.MockMvc
๋ HTTP ์์ฒญ์ ๋ชจ๋ฐฉํ์ฌ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ , ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋๋ถ์ ๊ฐ๋ฐ์๋ ๋ง์น ์ค์ HTTP ์์ฒญ๊ณผ ์๋ฅ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ฒ๋ผ ๋น์ทํ ๋ฐฉ์์ผ๋ก ํ ์คํธ๋ฅผ ์์ฑํ ์ ์๋ค.HTTP์์ฒญ๊ณผ ๊ด๋ จ๋ ํ ์คํธ๋ผ๋ ์ ์์ ์ ์ถ๊ฐ ๊ฐ๋ฅํ๋ฏ์ด, Controller์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ํ ์คํธํ ๊ฒฝ์ฐ ์ ์ฉํ๋ค.
MockBean
Mock์ ๊ป๋ฐ๊ธฐ๋ง ์๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค. ๊ธฐ์กด์
Bean
์ ๊ป๋ฐ๊ธฐ๋ง ๊ฐ์ ธ์ค๊ณ ๋ด๋ถ ๊ตฌํ์ ์ฌ์ฉ์์๊ฒ ์์ํ๋ ๋ฐฉ์์ด๋ค. ๋ง์น java์ interface์ฒ๋ผ ๋ง์ด๋ค.@MockBean
์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ํ ์คํธ์ฉ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ํตํด ํ ์คํธ๋ฅผ ์ํํ๋ค.
@SpyBean๊ณผ @MockBean์ ์ฐจ์ด
@MockBean
๊ณผ์ ์ฐจ์ด์ ์given
์์ ์ ์ธํ ๋์๋ง ํ ์ ์๋@MockBean
๊ณผ๋ ๋ฌ๋ฆฌ,@SpyBean
์given
์์ ์ ์ธํ ์ฝ๋ ์ธ์๋ ๋ชจ๋ ์ค์ ๊ฐ์ฒด์ ๊ฒ์ ์ฌ์ฉํ๋ค. ์ด๋ฏธ ์กด์ฌํ๋ Bean์SpyBean
์ผ๋ก wrappingํ ํํ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค๊ณ ํ๋ค. (jojoldu๋ ํํ)
@WebMvcTest
@WebMvcTest
์ด ์ด๋ ธํ ์ด์ ์ MVC ์ปจํธ๋กค๋ฌ์ ๋ํ ๋จ์ ํ ์คํธ ์์ฑ ์์ ์ฌ์ฉํ๋ค.
์ปจํธ๋กค๋ฌ ํ ์คํธ๋ฅผ ํ๋ ค๋ฉด spring ๋ด๋ถ์ context ์ ๋ณด๋ฅผ , ์๋ฒ์ ๊ด๋ จ๋ ์์์ด ํ์ํ ์ ์๋ค. ํ์ง๋ง
@WebMvcTest
๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ํ ์คํ๋ง MVC ๊ตฌ์ฑ์์๋ง ๋ก๋๋๋ค. ๋ฐ๋ผ์ ๋ถํ์ํ ๊ตฌ์ฑ ์์๋ค์ ๋ก๋ฉ์ ์ค์ด๊ณ ํ ์คํธ ์๋๋ฅผ ์ฌ๋ฆด ์ ์๋ค.์ด ์ด๋ ธํ ์ด์ ์ MockMvc ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ค. ์์ ๊ธฐ์ ํ ๊ฒ์ฒ๋ผ MockMvc ๊ฐ์ฒด๋ HTTP ์์ฒญ๊ณผ ๊ด๋ จ๋ ํ ์คํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
Last updated