Service์ ์๋ ๋ฉ์๋๋ฅผ ํ ์คํธํ๊ณ ์ถ์๋ฐ public์ผ๋ก ๋์ด์๋ ์ ์ฒด ๋ก์ง์ด ์๋
private์ผ๋ก ๋ ๊ธฐ๋ฅ์ด ๋๋์ด์ง ๋ฉ์๋์ ๊ธฐ๋ฅ๊ฒ์ฆ์ ํ๊ณ ์ถ๋ค.
๊ทธ๋์ public์ผ๋ก ๋ณ๊ฒฝํด์ ํ ์คํธ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ
์ฐพ์๋ณด๋
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ServiceImpl ํด๋์ค ๋ด์ ์ธํฐํ์ด์ค์ ์ ์๋์ง ์์ public ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ํผํด์ผ ํ ์ฌํญ์ ๋๋ค. ์ธํฐํ์ด์ค๋ ํน์ ๊ณ์ฝ(Contract)์ ์ ์ํ๊ณ , ์ด๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ค์ ํด๋น ๊ณ์ฝ์ ์ง์ผ์ผ ํฉ๋๋ค. ๋ง์ฝ ์ธํฐํ์ด์ค์ ์ ์๋์ง ์์ ๋ฉ์๋๋ฅผ ํด๋์ค ๋ด์์ ์ถ๊ฐํ๋ค๋ฉด, ์ฝ๋์ ์ผ๊ด์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ์ ํ๋ ์ ์์ต๋๋ค.
๋ผ๊ณ ํ๋ค. ๋ง๋ ๋ง์ธ๋ฐ ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ํ ์คํธํ๋ ๊ฒ ์ข์๊น?
Reflection
๋ฆฌํ๋ ์ ์ถ์ฒํ๋ ๊ธ์ด ๋ง์ด ๋ณด์ฌ์ ์ฌ์ฉํ๋ค. ๋ฌธ์ ๋
private ๋ฉ์๋๋ ๋ด๋ถ๋ฅผ ๊ฐ์ถ์ด ํด๋ผ์ด์ธํธ์์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฐ์ฃผ๋๋ฐ, ํด๋ผ์ด์ธํธ์ธ ํ ์คํธ ํด๋์ค๊ฐ ๋ด๋ถ ๋ฉ์๋๋ฅผ ์๊ณ ์์ผ๋ ๊ฒฐํฉ๋๊ฐ ๋์์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ์ ์ง๋ณด์ํ ๋ ํ ์คํธ์ ๋ํ ๋น์ฉ์ ์ฆ๊ฐ์ํค๋ ์์ธ์ด ๋ ์ ์๋๋ฐ, ๋ฉ์๋ ์ด๋ฆ์ด๋ ํ๋ผ๋ฏธํฐ ๋ฑ์ ๋ณ๊ฒฝํ ๋ ์คํจํ๊ฒ ๋๋ค.
์ธ๋ฐ, ๋ด๊ฐ ์ํ๋ ํ ์คํธ๋ public ๋ฉ์๋์์ ์ฌ์ฉ๋๊ณ ์๋ private ๋ฉ์๋์ ๊ธฐ๋ฅ๊ฒ์ฆ ํ๋ ๊ฑฐ์๊ธฐ ๋๋ฌธ์
๊ฒฐํฉ๋์ ๋ฌด๊ดํ๋ค๊ณ ์๊ฐํ๊ณ ํด๋น ํด๋์ค๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ํ ์คํธ๊ฐ ๊นจ์ง๋ ๊ฑด ๋น์ฐํ๋ค๊ณ (๋ฏฟ์์งํ ํ ์คํธ ์ฝ๋) ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ค.
์คํ๋ง์ ๋ด๋ถ์ ์ผ๋ก ๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ณ ๋ง๊ฒ๋ ReflectionTestUtils๋ฅผ ์ ๊ณตํด ์ค๋ค.
@ExtendWith(MockitoExtension.class)
class UserSErviceImplTest {
@InjectMocks
UserServiceImpl userService;
@Test
void filterSignUpOverMonths() {
// testDataList ์์ฑ
List<User> result = ReflectionTestUtils.invokeMethod(
userService, "filterSignUpOverMonths", testDataList, 6);
// ํ
์คํธ ๊ฒฐ๊ณผ ๊ฒ์ฆ
}
}
์ค์ ๋ฉ์๋ ๋ก์ง ํ ์คํธ๋ฅผ ๋ชฉ์ ์ผ๋ก Mockito๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด Extend ํด์ Service๋ฅผ ์ฃผ์ ํ๋ค
๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ๋ฉด. invokeMethod ์ฒ์ ์ธ์๊ฐ(target)์ UserServiceImpl.class ํ๋ฉด ๋๋๋ฐ ์ ๊ตณ์ด Mockito๊น์ง ์ฌ์ฉํ๋๋ฉดUserServiceImpl.class ์ ์๋ filterSignUpOverMonths ๋ฉ์๋๊ฐ ์ ์ ๋ฉ์๋๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ธ์คํด์คํ๊ฐ ํ์ํ๋ค.
(static ๋ฉ์๋ ๋ผ๋ฉด ์ํด๋ ๋๋ค)
์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ณ๊ฒฝํ์ง ์๊ณ ํ ์คํธํด์ ๋ฟ๋ฏ
๋์ ๋ฐ์ ๊ณณ
'๐ TESTING' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐํ๊ฐ์ด ์๋ ์๋น์ค ํ ์คํธํ๊ธฐ (0) | 2023.06.28 |
---|---|
์ดํํฐ๋ธ ์ํํธ์จ์ด ํ ์คํ : ์ฌ๋ก ์ค์ฌ์ผ๋ก ๋ฐฐ์ฐ๋ ์ค์ ์ํํธ์จ์ด ํ ์คํธ ๊ฐ์ด๋ (0) | 2023.04.21 |