๐Ÿœ TESTING

private ๋ฉ”์„œ๋“œ๋Š” ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธ ํ• ๊นŒ?

์• ์ •์“ฐ 2024. 1. 4. 15:10

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 ๋ฉ”์„œ๋“œ ๋ผ๋ฉด ์•ˆํ•ด๋„ ๋œ๋‹ค)

 

์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํ…Œ์ŠคํŠธํ•ด์„œ ๋ฟŒ๋“ฏ

 

๋„์›€ ๋ฐ›์€ ๊ณณ

https://mangkyu.tistory.com/235

๋ฐ˜์‘ํ˜•