๐Ÿ”ฅ TIL - Day 47

Kim Dae Hyunยท2021๋…„ 11์›” 4์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
56/93

Springboot์—์„œ Mockito๋ฅผ ์ด์šฉํ•œ ๋‹จ์œ„ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž.

์šฐ์„  Mockito๊ฐ€ ์™œ ํ•„์š”ํ•œ ์ง€์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ์–ด๋–ป๊ฒŒ ์จ์•ผ ํ•  ์ง€ ๊ฐ์ด ์˜ฌ ๊ฒƒ ๊ฐ™๋‹ค.
Service ๋Š” ๋Œ€๋ถ€๋ถ„ Repository๋ฅผ ๊ฐ–๋Š”๋‹ค.
์ฆ‰, Service๋Š” Repository์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ๊ด€์ ์œผ๋กœ ๋ณผ ๋•Œ Service๋ฅผ ํ…Œ์ŠคํŠธ ํ•  ๋•Œ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์˜ํ–ฅ์„ ์ตœ์†Œ๋กœ ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ์ˆœ์ˆ˜ํ•˜๊ฒŒ Service์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ํŽธํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๊ณ  Repository๋ฅผ ์ง์ ‘ ์ฃผ์ž…๋ฐ›์•„์„œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ํ˜•์‹์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ์˜ ์‹คํŒจ ํ˜น์€ ์„ฑ๊ณต์˜ ์—ฌ๋ถ€๊ฐ€ Service์— ์žˆ๋Š” ์ง€ Repository์— ์žˆ๋Š”์ง€ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์—†์„ ๊ฒƒ์ด๋‹ค. ์• ์ดˆ์— ์ด๊ฑด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋‹ค.

์ˆœ์ˆ˜ํ•˜๊ฒŒ ํ•œ ๊ฐœ ํด๋ž˜์Šค๋งŒ์„ ํ…Œ์ŠคํŠธํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์„ ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ Mockito์ด๋‹ค.

๐Ÿ“Œ Mockito๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ

์–ด๋–ค Service ํด๋ž˜์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ ์ž ํ•  ๋•Œ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉ๋  Repository์˜ ๊ธฐ๋Šฅ๋“ค์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

Repository์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ ํ„ฐ๋ฌด๋‹ˆ์—†๋Š” ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ๋Š” ํ…Œ์ŠคํŠธ์— ์˜ํ–ฅ์„ ๋ผ์น  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ ์ ˆํ•œ ๊ฐ’์ด ๋‚˜์˜ค๋„๋ก ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด DB ๋Œ€์‹  ์ปฌ๋ ‰์…˜์„ ์ด์šฉํ•ด์„œ Repository์˜ CRUD๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ์‹์ด๋‹ค.

ํ…Œ์ŠคํŠธ ํ•  ํด๋ž˜์Šค๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋ฐฐ๋ณด๋‹ค ๋ฐฐ๊ผฝ์ด ๋” ํฐ ์ž‘์—…์ด ๋  ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ์ž‘์—…์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด Mockito๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ“Œ Mockito ์ ์šฉ

์ด ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๊ฐ€ Mockito๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ํ‘œ์‹œ๋ฅผ ํ•ด์ค€๋‹ค.

@ExtendWith(MockitoExtension.class)

Mock๊ฐ์ฒด ์„ ์–ธ

@Mock
UserRepository userRepository;

Mockito.when()

  • UserService์˜ ์–ด๋–ค ๋ฉ”์„œ๋“œ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ UserRepository์˜ findById๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ when๊ณผ thenReturn ๋ฌธ์„ ์ด์šฉํ•ด์„œ ๋™์ž‘์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด์ œ ํ•ด๋‹น ํ…Œ์ŠคํŠธ์—์„œ๋Š” UserRepository์˜ findById์— id๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด ๋ฐ˜๋“œ์‹œ Optional.of(user)๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋œ๋‹ค.
Long id = 1L;
User user = new User(id, "kim", 26);
Mockito.when(userRepository.findById(id))
	.thenReturn(Optional.of(user));
profile
์ข€ ๋” ์ฒœ์ฒœํžˆ ๊นŒ๋จน๊ธฐ ์œ„ํ•ด ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๐Ÿง

0๊ฐœ์˜ ๋Œ“๊ธ€