1.1 ๋ชจํคํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ค๋ ์ฐ๋ฆฌ๋ ๊ณ ๊ธ ํ ์คํธ์ ๋ํด ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ๋ณด๋ค ๊ตฌ์ฒด์ ์ผ๋ก Mockito ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค . ์ด ์ฌ์ ์์ ๋ฒ์ด๋ ์๊ฐ์กฐ์ฐจ ํ์ง ๋ง์ญ์์ค.
์ฒซ์งธ, ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Spring ํ ์คํธ ์ ํ์ค์ ๋๋ค . ์ค์ ๋ก Java ๋ฐฑ์๋ ๊ฐ๋ฐ ์ ๊ณ์ ํ์ค์ ๋๋ค.
๋์งธ, Spring ์ฝ๋์ ๋ํ ํ ์คํธ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค . ์์ฑํ ๋ฐฑ์๋๊ฐ ์ ๋๋ก ์๋ํ๋์ง ์ดํดํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ํด๋น API์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋๋ค . ๊ทธ๋ฆฌ๊ณ ํ ์คํธ๋ฅผ ํตํด ์ํํ๋ ๊ฒ์ด ๊ทธ๋ ์ง ์์ ๊ฒ๋ณด๋ค 10๋ฐฐ ๋ ์ฝ์ต๋๋ค. ์ง์ ํ์ธํ์ค ์ ์์ต๋๋ค.
pom.xml
๋ค์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ Mockito ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
Mockito ํ๋ก์ ํธ์ ์ ์ฒด ์์ค ์ฝ๋๋ GitHub ์์ ์ฐพ์ ์ ์์ต๋๋ค .
1.2 ๋ชจ์ ๊ฐ์ฒด
๊ทธ๋ ๋ค๋ฉด ์ด Mockito๋ ๋ฌด์์ด๋ฉฐ ์ ๊ทธ๋ ๊ฒ ์ข์๊ฐ์?
ํ ์คํธ ๊ฐ๋ฐ ๋ฐ ๊ฐ๋ฐ ๊ณผ์ ์์ ์ค์ ๊ฐ์ฒด ๋์ ์ผ์ข ์ "์คํ "์ ์ฝ๋์ ์ฝ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋งค์ฐ ๋ง์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํจ๊ป ์๋ํ๋ ์ฝ๋๋ ํ ์คํธ๋๊ณ ๊ฑฐ๊ธฐ์์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ๊ฐ ํ ์คํธ ์ ์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๊ฐ ๋์ผํ ๊ฒ์ด ์ข์ต๋๋ค(๊ทธ๋ ์ง ์์ผ๋ฉด ํ ์คํธ๊ฐ ๋ฌ๋ผ์ง๋๋ค). ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ์ํ๋ฅผ ๋น ๋ฅด๊ฒ ๋กค๋ฐฑํ๊ธฐ ์ํด ๋ฒ ์ด์ค๊ฐ ๋ ๊ฐ๋จํ์ผ๋ฉด ํฉ๋๋ค.
๋๋ ์๋ฅผ ๋ค์ด ์ ์ฉํ SMS๋ฅผ ๋ณด๋ด๋ ์ฝ๋๋ฅผ ํ ์คํธํ๊ณ ์์ต๋๋ค. ๋ค์ด๋ ํธ ๋ฉ์ผ๋ง์ ๊ฒฝ์ฐ ์ผ์ข ์ ์ ๋ฃ SMS ๊ฒ์ดํธ์จ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ดํดํ ์์๋ ์ฌ๋๋ค์๊ฒ ์๋ฐฑ ๊ฐ์ SMS๋ฅผ ๋ณด๋ด์ง ์๋๋ก ์ฝ๋๋ฅผ ํ ์คํธํ๊ธฐ ์ํด ์ผ๋ถ ๊ฐ์ ๊ฒ์ดํธ์จ์ด๋ฅผ ์ฌ๊ธฐ์ ๋ฃ๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค.
๋๋ ์ฝ๋๊ฐ ํ ์คํธ ์๋ฒ์์ ์ฌ์ฉํ ์ ์๋ ๋ค๋ฅธ ์น ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ์์ต๋๋ค. ๋๋ 50๋ฒ ํ ์คํธํด์ผ ํ๋ ์จ๋ผ์ธ ๊ฒฐ์ ์ฉ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ค์ ๊ธ์ต ์ฑ๋์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋๋ ๋น์ ์ด ์ดํดํ๋ค๊ณ ์๊ฐํฉ๋๋ค ... ๊ฐ์ ๊ฐ์ฒด ๋๋ ์คํ ๊ฐ์ฒด๋ผ๊ณ ๋ํ๋ ๊ฐ์ ๊ฐ์ฒด๋ ๋งค์ฐ ์ ์ฉํ ๊ฒ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ด๋ ค์์ด ์์ต๋๋ค. Java์๋ ์ ์ ํ์ดํ์ด ์์ต๋๋ค. ์ฆ, ์ ํ์ ๊ฐ์ฒด ๋์ ReadDatabase
๋ณ์์ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ํ ๋น ํ๋ ค๋ฉด ์์ VirtualDatabase
ํด๋์ค๋ฅผ ์์ํด์ผ ํฉ๋๋ค .VirtualDatabase
RealDatabase
๊ทธ๋ฐ ๋ค์ ํด๋์ค์๋ RealDatabase
๋ค๋ฅธ ์ค์ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์ฅํ๋ ๋ง์ ๊ฐ์ธ ๋ฉ์๋์ ๋ณ์๊ฐ ์์ผ๋ฉฐ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ผ๋ฐ ์คํ
์ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ก ์ ์ผ๋ก๋ ์ข์ง๋ง ์ค์ ๋ก๋ ๋ง ๋ค๋ฅธ ๊ณจ๋ชฉ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ Java 5์ ๋ค์ ๋ฑ์ฅํ ๊ตฌ์กฐ ( DynamicProxy
์์ธํ ๋ด์ฉ์ ์ฝ์ ์ ์์ )๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ปดํ์ผ๋ฌ๊ฐ ๋ถ๋ง์ ์ ๊ธฐํ์ง ์๋ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ชจ์ ๋ผ๊ณ ํฉ๋๋ค (๋ชจ์ ๋ ์ด์์์ด๋ผ๋ ๋จ์ด์์ ์ ๋). Mockito ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ฌํ ๋ชจ์ ๊ฐ์ฒด๋ก ์์ ์ ์ ๋ก ์๋ ์์ค์ผ๋ก ๋์ด์ฌ๋ฆด ์ ์์์ต๋๋ค. ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ๋์๊ด์ ์ด๋ฆ์ ๋๋ค.
1.3 @ExtendWith ์ฃผ์
Mockito ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ JUnit๊ณผ ์ ์๋ํ๋ฉฐ JUnit์ ํ์ฅ์ผ๋ก ๊ฐ์ฃผ๋ ์๋ ์์ต๋๋ค.
๋จ์ ํ ์คํธ์์ Mockito ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฑํํ๋ ๋ฐฉ๋ฒ์๋ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ํน์ ์ฃผ์์ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
@ExtendWith(MockitoExtension.class)
public class MockitoAnnotationTest {
...
}
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์์
์ ํ์ฑํํ๋ ๊ฒ์
๋๋ค openMocks()
.
public class MockitoAnnotationTest {
@BeforeEach
public void init() {
MockitoAnnotations.openMocks(this);
}
}
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ์ต์ ์ด ํ์๋์ง๋ง ๋ ๋ฒ์งธ ์ต์ ์ด ์๋ค๋ ๊ฒ์ ์๋ ๊ฒ์ด ์ ์ฉํ ๋๋ ์์ต๋๋ค.
GO TO FULL VERSION