Spring test

ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ(Integration Test)

  • ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋Š” ์ „์ฒด ๋ชจ๋“ˆ์ด ํ•ฉ์ณ์กŒ์„ ๋•Œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ์ง€ ๊ฒ€์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ฉฐ ๋‹จ๊ณ„์ด๋‹ค.

  • ๊ฐ ๋ชจ๋“ˆ์ด๋‚˜ ์œ ๋‹›์ด ๋ณ„๊ฐœ๋กœ๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋”๋ผ๋„ ์„œ๋กœ ์—ฐ๊ณ„๋์„ ๋•Œ๋Š” ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ํ…Œ์ŠคํŠธ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

@Autowired

  • @Autowired๋Š” ๊ฐ์ฒด๋ฅผ Spring container์— ์˜ํ•ด์„œ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.

@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

  • ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ MVC ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ์‹œ์— ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋ ค๋ฉด spring ๋‚ด๋ถ€์˜ context ์ •๋ณด๋ฅผ , ์„œ๋ฒ„์™€ ๊ด€๋ จ๋œ ์ž์›์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ @WebMvcTest๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•„์š”ํ•œ ์Šคํ”„๋ง MVC ๊ตฌ์„ฑ์š”์†Œ๋งŒ ๋กœ๋“œ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถˆํ•„์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์˜ ๋กœ๋”ฉ์„ ์ค„์ด๊ณ  ํ…Œ์ŠคํŠธ ์†๋„๋ฅผ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

  • ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ MockMvc ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์œ„์— ๊ธฐ์ˆ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ MockMvc ๊ฐ์ฒด๋Š” HTTP ์š”์ฒญ๊ณผ ๊ด€๋ จ๋œ ํ…Œ์ŠคํŠธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

Mockito ํ•œ๊ธ€๋ฌธ์„œ

Last updated