Mockito

Mockito๋ž€?

์šฐ์„  Mock์ด๋ผ๋Š” ๊ฐœ๋…์„ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž -> Mock์ด๋ž€ ๋†€๋ฆฌ๋‹ค, ์กฐ๋กฑํ•˜๋‹ค๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ ์˜๋‹จ์–ด์ด๋‹ค ํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ผ๊นŒ? Mock ์ด๋ž€ ์ง„์งœ ๊ฐ์ฒด์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์„œ ํ…Œ์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค ์ด ๊ฐ์ฒด๋Š” ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•˜๊ฒŒ ํ•  ๊ฒƒ์ด๋‹ค ์ด๋ ‡๊ฒŒ ์„ ์–ธํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค

Mockito๋Š” ์œ„์˜ Mock๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ œ๊ณตํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” Mock framework์ด๋‹ค

๊ทธ๋ž˜์„œ ์š”๋†ˆ์˜ ์šฉ๋„๋Š” ์–ด๋””์—๋‹ค๊ฐ€ ์“ฐ๋Š”๊ฑฐ๋ƒ?

  • DB์—์„œ ์›ํ•˜๋Š” ๊ฐ’์„ ๋„ฃ์–ด๋‘๊ณ  ์‹ค์ œ ๊ฐ€์ ธ์˜ค๋ฉด์„œ ํ…Œ์ŠคํŒ… ๊ฐ€๋Šฅ

  • ๋‚ด๋ถ€์˜ API๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” mocking์„ ํ†ตํ•ด์„œ ๊ฐ ๊ฐ’๋“ค์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

  • repository๋„ ๊ตณ์ด ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ ๋„ Mockito์„ ํ†ตํ•ด์„œ ๋งŒ๋“ค์–ด๋‘๋ฉด ์‰ฝ๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ

๋‹จ์œ„ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ์กฐ๊ธˆ์€ ์• ๋งคํ•œ๋ฐ ๋ญ ๋ฉ”์†Œ๋“œ๋ฅผ ๋‹จ์œ„๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฒƒ์„ Mockingํ•ด์•ผ ์ง„์งœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ๋„ ์žˆ๊ณ , ๋‹จ์ˆœํ•˜๊ฒŒ ์–ด๋– ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ ๊ทธ ์™ธ์˜ ๊ฒƒ๋“ค ์„ Mockingํ•  ์ˆ˜๋„ ์žˆ๋‹ค ์ด๋Ÿฌํ•œ ๊ฒƒ์€ ์งœ๋Š” ์‚ฌ๋žŒ ๋งˆ์Œ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธด ํ•œ๋‹ค

์›๋ž˜ ์•„๋Š” ๊ฑด @Mock์„ ํ†ตํ•ด์„œ Mocking์„ ์ง„ํ–‰ํ–ˆ์—ˆ๋‹ค ๊ทผ๋ฐ ๊ถ๊ธˆํ•œ๊ฒŒ ์ƒ๊ฒผ๋‹ค -> ๋งŒ์•ฝ A๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ mock์„ ๋•Œ๋ ค๋‘๊ณ  ๊ทธ ๋‚ด๋ถ€์˜ ๋ฉ”์†Œ๋“œ A_method๋ฅผ ๋ถ€๋ฅด๋Š”๋ฐ A_method๋‚ด๋ถ€์—์„œ B๋ผ๋Š” ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ B_Method์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๊ทธ๋ž˜์„œ ์ฐพ๊ฒŒ ๋œ๊ฑด @InjectMock ์ด๋ผ ์• ๋…ธํ…Œ์ด์…˜์ด๋‹ค @Mock์ด ๋‹จ์ˆœํ•˜๊ฒŒ Mock ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์• ๋…ธํ…Œ์ด์…˜์ด๋ผ๋ฉด @InjectMock์€ ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋œ Mock๊ฐ์ฒด๋ฅผ ์ด ์• ๋…ธํ…Œ์ด์…˜์„ ์„ ์–ธํ•œ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•œ Mock๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ณณ์—๋‹ค๊ฐ€ ๋„ฃ์–ด์ฃผ๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค

Stubbing ์ด๋ž€?

์œ„์—์„œ Mock๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์›ํ•˜๋Š” ๊ฐ’์„ ๋ฆฌํ„ด ๋˜๋Š” ๊ฐ€์ง€๊ณ ๋„๋ก ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ ํ•ด๋‹น ํ•˜๋Š” ์ž‘์—…์„ Stubbing์ด๋ผ๊ณ  ํ•ด์ค€๋‹ค

๊ธฐ๋ณธ์ ์œผ๋กœ ์ฒ˜์Œ ๋งŒ๋“ค์–ด์ง€๋ฉด DEFAULT ๊ฐ’์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™๋‹ค

  • ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋ผ๋ฉด ๋ชจ๋‘ NULL์„ ๋ฆฌํ„ดํ•œ๋‹ค

  • Primitive ํƒ€์ž…์€ ๊ธฐ๋ณธ Primitive๊ฐ’์„ ๋ฆฌํ„ด

  • ์ฝœ๋ ‰์…˜ ํƒ€์ž…์ด๋ผ๋ฉด ๋น„์–ด์žˆ๋Š” ์ฝœ๋ ‰์…˜์„ ๋ฆฌํ„ด

  • void ํƒ€์ž…์€ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€์ง€ ์•Š๊ณ  ์•„๋ฌด๋Ÿฐ ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Œ

BDD

Behaviour-Driven Development ์ด๋ผ๋Š” ์˜๋ฏธ์ด๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ด๋–ป๊ฒŒ ํ–‰๋™ํ•˜๋Š”์ง€, ์ž˜ ํ–‰๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ ๊ธฐ๋ฒ•์ด๋‹ค given - when - then given์€ ์„ค์ •ํ•˜๋Š” ๋‹จ๊ณ„๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค -> stub, mock, ์„ ์–ธ๋“ฑ์„ ํ•ด์ฃผ๊ณ  when์€ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ณ  ์‹ถ์€ ์ฝ”๋“œ๋“ค์„ ์ž‘์„ฑํ•˜๋Š” ๊ทธ๋Ÿฌํ•œ ๋‹จ๊ณ„ then์€ ํ…Œ์ŠคํŠธํ•œ ์ฝ”๋“œ๋“ค์ด ๋Œ์•„๊ฐ€๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์„ ํ™•์ธํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค

Last updated

Was this helpful?