@Mock, @MockBean

@Mock๊ณผ @MockBean์€ ๋ชจ๋‘ ๋ชจ์˜ ๊ฐ์ฒด(Mock Objects)๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์ปจํ…์ŠคํŠธ์™€ ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

@Mock

Mockito ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋ฉฐ ์ผ๋ฐ˜์ ์ธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.

Spring ์ปจํ…์ŠคํŠธ๋ฅผ ๋กœ๋“œํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ํ…Œ์ŠคํŠธ์— ์ ํ•ฉํ•˜๋‹ค.

ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์—์„œ MockitoJUnitRunner๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ @ExtendWith(MockitoExtenstion.class)๋ฅผ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค. ํ˜„์žฌ๋Š” MockitoExtension์„ ๋” ๊ถŒ์žฅํ•œ๋‹ค.

// @RunWith(MockitoJUnitRunner.class) -> JUnit 4์—์„œ ์‚ฌ์šฉ๋˜๋Š” Runner
@ExtendWith(MockitoExtension.class) // -> JUnit 5์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ™•์žฅ ๋ชจ๋ธ
class MyServiceTest {
    @Mock
    private MyRepository repository;
    
    @InjectMocks
    private MyService service;
}

@Mock์˜ ์˜์กด์„ฑ ์ฃผ์ž…์€ Mockito์˜ @InjectMocks์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค.

@MockBean -> Spring 3.4.x Deprecated

SpringbootTest์—์„œ ์ œ๊ณตํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ๋ณดํ†ต ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.

Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Œ€์ ์œผ๋กœ ๋ฌด๊ฒ๊ณ  ๋А๋ฆฌ๋‹ค.

  • @SpringbootTest ๋˜๋Š” @WebMvcTest ๋“ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค.

  • Spring ์ปจํ…์ŠคํŠธ์™€ ์ƒํ˜ธ์ž‘์šฉ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์•ผํ•œ๋‹ค๋ฉด ๋ชฉ๋นˆ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • Spring์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ (Spring Context์— ๋“ฑ๋ก๋œ ๋นˆ์„ ๋ชจํ‚นํ•  ์ˆ˜ ์žˆ์Œ)

@MockBean์˜ ์˜์กด์„ฑ ์ฃผ์ž…์€ Spring์˜ ์˜์กด์„ฑ ์ฃผ์ž… ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ex) @Autowired

SpringContext

Spring ์ปจํ…์ŠคํŠธ(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ)๋Š” Spring ํ”„๋ ˆ์ž„์›Œํฌ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

SpringContext๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ์ฒด๋“ค์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค. = ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(๋นˆ์„ ๊ด€๋ฆฌ)

์˜์กด์„ฑ ์ฃผ์ž…, ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ • ์ •๋ณด๋ฅผ ๋กœ๋“œํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.

@SpringbootTest๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „์ฒด SpringContext๋ฅผ ๋กœ๋“œํ•œ๋‹ค.

Last updated