Mock
Last updated
Last updated
Mock์ "๋ชจ์, ๊ฐ์ง์"๋ผ๋ ๋ป์ผ๋ก, ํ ์คํธ์ ์ค์ ๊ฐ์ฒด์ ๋์ผํ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ํ ์คํธ ํจ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
๋ชจ์ ๊ฐ์ฒด(Mock Object)๋ ์ฃผ๋ก ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๊ฐ๋ฐํ ํ๋ก๊ทธ๋จ์ ํ ์คํธ ํ ๊ฒฝ์ฐ ํ ์คํธ๋ฅผ ์ํํ ๋ชจ๋๊ณผ ์ฐ๊ฒฐ๋๋ ์ธ๋ถ์ ๋ค๋ฅธ ์๋น์ค๋ ๋ชจ๋๋ค์ ์ค์ ์ฌ์ฉํ๋ ๋ชจ๋์ ์ฌ์ฉํ์ง ์๊ณ ์ค์ ์ ๋ชจ๋์ "ํ๋ด"๋ด๋ "๊ฐ์ง" ๋ชจ๋์ ์์ฑํ์ฌ ํ ์คํธ์ ํจ์ฉ์ฑ์ ๋์ด๋๋ฐ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ด๋ค.
Mockito๋ Mock ๊ฐ์ฒด๋ฅผ ์ง์ํ๋ ํ ์คํธ ํ๋ ์์ํฌ๋ก, Mockito๋ฅผ ํ์ฉํ์ฌ ๊ฐ์ง ๊ฐ์ฒด์ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ Stubํ์ฌ ๋จ์ ํ ์คํธ๋ฅผ ์งํํ ์ ์๋ค.
์คํ๋ง ๋ถํธ 2.0์ดํ์๋ spring-boot-starter-test
dependency์ ํฌํจ๋์ด ์๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ํ Mockito๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํ
์คํธ ํด๋์ค ์์ @ExtendWith(MockitoExtension.class)
๋ฅผ ์ถ๊ฐํด์ค์ผํ๋ค.
mock ์์ฑ๊ณผ ๊ด๋ จ๋ ์ด๋
ธํ
์ด์
์ @Mock
, @Spy
, @InjectMock
์ด ์๋ค.
mock ์์ฑ ๊ด๋ จ ํ
์คํธ๋ฅผ ์ํด ์์๋ก ItemService
๋ฅผ ์์ฑํด์ฃผ์๋ค.
@Mock
์ Mock ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ฐํํด์ฃผ๋ ์ด๋
ธํ
์ด์
์ด๋ค. ์์ฑํ mock ๊ฐ์ฒด๋ stubbing์ ํด์ฃผ์ง ์๊ณ , ํธ์ถํ๊ฒ ๋๋ฉด primitive type์ 0, ์ฐธ์กฐํ์ null์ ๋ฐํํ๋ค.
@Spy
๋ก ์์ฑํ mock ๊ฐ์ฒด๋ ์ค์ ๊ฐ์ฒด์ด๋ฉฐ, ๋ฉ์๋ ์คํ ์ stubbing์ ํ์ง ์์ผ๋ฉด ๊ธฐ์กด ๋ก์ง์ ์คํํ ๊ฐ์, stubbing์ ํ ๊ฒฝ์ฐ์๋ ๊ทธ ๊ฐ์ ๋ฐํํ๋ค.
@InjectMocks
์ @Mock
ํน์ @Spy
๋ก ์์ฑํ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ฃผ์
ํด์ฃผ๋ ์ด๋
ธํ
์ด์
์ด๋ค. ํด๋น ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํด ์ฃผ์
๋ฐ์ ์ ์๋ ํํ๋ Constructure, Property Setter, Field Injection์ด ์๋ค.
Stub(Stubbing)์ ํ ๋ง, ๋จ์ ๋ถ๋ถ, ๊ฝ์ด, ๋ชฝ๋น์ฐํ์ด๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๊ฐ์ง ๊ฐ์ฒด๊ฐ ๋ง์น ์ค์ ๋ก ๋์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋๋ก ๋ง๋ค์ด๋์ ๊ฒ์ด๋ค.
Test stubs provide canned answers to calls made during the test, usually not responding at all to anything outside whatโs programmed in for the test.
์ฆ, stub์ ๋ง๋ค์ด์ง mock ๊ฐ์ฒด๊ฐ ์ด๋ค ๊ฐ์ ๋ฐํํ ์ง๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ค.
Mockito์์๋ when ๋ฉ์๋๋ฅผ ์ด์ฉํด OngoingStubbing์ ์ง์ํ๊ณ ์๋ค. OngoingStubbing์ when์ ๋ฃ์ ๋ฉ์๋์ ๋ฆฌํด๊ฐ์ ์ ์ํด์ฃผ๋ ๋ฉ์๋์ด๋ค.
๋ฉ์๋ ์ฒด์ด๋์ผ๋ก ์ฌ์ฉํ๋ฉด, ํธ์ถ์๋ง๋ค ๋ค๋ฅธ Stubbing์ ํธ์ถํ ์ ์๋ค.
Stubber ๋ฉ์๋๋ ๋ฐ๋์ Stubbing์ด ์คํ๋์ผํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๋ฉ์๋์ด๋ค.
verify()
๋ฅผ ์ด์ฉํ์ฌ Stubbingํ ๋ฉ์๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๋์ง ๊ฒ์ฆํ ์ ์๋ค.
๋ฉ์๋๋ช | ์ค๋ช |
---|---|
๋ฉ์๋๋ช | ์ค๋ช |
---|---|
thenReturn
Stubbingํ ๋ฉ์๋ ํธ์ถ ํ ์ด๋ค ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ง ์ ์
thenThrow
Stubbingํ ๋ฉ์๋ ํธ์ถ ํ ์ด๋ค Exception์ Throwํ ์ง ์ ์
thenAnswer
Stubbingํ ๋ฉ์๋ ํธ์ถ ํ ์ด๋ค ์์ ์ ํ ์ง custom ์ ์ ์ด ๋ฉ์๋๋ ์ฌ์ฉํ์ง ๋ง๊ณ , thenReturn, thenThrow ์ฌ์ฉ ๊ถ์ฅ
thenCallRealMethod
์ค์ ๋ฉ์๋ ํธ์ถ
๋ฉ์๋๋ช
์ค๋ช
doReturn
Stubbing ๋ฉ์๋ ํธ์ถ ํ ์ด๋ค ํ๋์ ํ ๊ฑด์ง ์ ์
doThrow
Stubbing ๋ฉ์๋ ํธ์ถ ํ ์ด๋ค Exception์ throwํ ๊ฑด์ง ์ ์
doAnswer
Stubbing ๋ฉ์๋ ํธ์ถ ํ ์์ ์ ํ ์ง customํ๊ฒ ์ ์
doNothing
Stubbing ๋ฉ์๋ ํธ์ถ ํ ์ด๋ค ํ๋๋ ํ์ง ์๊ฒ ์ ์
doCallRealMethod
์ค์ ๋ฉ์๋ ํธ์ถ
times(n)
๋ช ๋ฒ์ด ํธ์ถ๋๋์ง ๊ฒ์ฆ
never
ํ ๋ฒ๋ ํธ์ถ๋์ง ์์๋์ง ๊ฒ์ฆ
atLeastOne
์ต์ ํ ๋ฒ์ ํธ์ถ๋๋์ง ๊ฒ์ฆ
atLeast(n)
์ต์ n ๋ฒ์ด ํธ์ถ๋๋์ง ๊ฒ์ฆ
atMostOnce
์ต๋ ํ ๋ฒ์ด ํธ์ถ๋๋์ง ๊ฒ์ฆ
atMost(n)
์ต๋ n ๋ฒ์ด ํธ์ถ๋๋์ง ๊ฒ์ฆ
calls(n)
n๋ฒ์ด ํธ์ถ๋๋์ง ๊ฒ์ฆ (InOrder๋ ๊ฐ์ด ์ฌ์ฉํด์ผ ํจ)
only
ํด๋น ๊ฒ์ฆ ๋ฉ์๋๋ง ์คํ๋๋์ง ๊ฒ์ฆ
timeout(long mills)
n ms ์ด์ ๊ฑธ๋ฆฌ๋ฉด Fail ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ก ๊ฒ์ฆ ์ข ๋ฃ
after(long mills)
n ms ์ด์ ๊ฑธ๋ฆฌ๋์ง ํ์ธ timeout๊ณผ ๋ค๋ฅด๊ฒ ์๊ฐ์ด ์ง๋๋ ๋ฐ๋ก ๊ฒ์ฆ ์ข ๋ฃ๊ฐ ๋์ง ์์
description
์คํจํ ๊ฒฝ์ฐ ๋์ฌ ๋ฌธ๊ตฌ