Wookim

Junit service(bean) private method test 본문

programming language/Java

Junit service(bean) private method test

개발자인 경우 2021. 4. 12. 18:26

junit으로 테스트를 작성 중 service(bean)의 private method를 테스트는 어떻게 하나 찾아봤다. 

 

이를 정리해 본다.

 

 

테스트 내용은 다음과 같다.

 

미성년자임을 확인하기 위한 메소드 



@Service
public class ComonUtilServiceImpl implements CommonUtilService{

	private void verifyIsAdult(String birth){
    	       
         LocalDate now = LocalDate.now();
        
         // birth ex) 19930306
         LocalDate birth = LocalDate.parse(birth, DateTimeFormatter.ofPattern("yyyyMMdd");
        
         if(Period.between(birth, now).getYears() < 20){
        	throw new RuntimeException("미성년자 가입 불가");
       	 }
    }
}

 

위 메소드를 정상 작동하는지 확인해보자

 

 

TestClass 파일을 만들어야 하는데, 

 

위 class 파일의 위치가 

src/main/java/com.dev.ex.service.impl 이라면 

src/test/java/com.dev.ex.service.impl test 하위 폴더에 동일한 패키지 경로로 test 클래스 파일을 생성해야 한다.

 

 

junit test class 파일



package com.dev.ex.service.impl;

...

@SpringBootTest
@RunWith(SpringRunner.class) 
public class CommonUtilServiceTest{

    @Autowired
    private CommonUtilServiceImpl service;
    
    @Test(expected = RuntimeException.class) // 미성년자 일 경우 예외 발생하기에 설정
    public void 미성년자_검증하다(){
    
    	// 오늘로 성인이 되는 사람의 생년월일 생성
    	Localdate adultDate = LocalDate.now().minusYears(20);
        String adult = adultDate.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        
        // private method 테스트 하기
        ReflectionTestUtils.invokeMethod(service, "verifyIsAdult", adult);
        
        // 내일 성인이 되는 미성년자
    	Localdate adultDate = LocalDate.now().minusYears(20).plusDays(1);
        String kid = adultDate.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        
        // private method 테스트 하기
        ReflectionTestUtils.invokeMethod(service, "verifyIsAdult", kid);
        
    }

}

 

위 코드의 핵심 내용은 

ReflectionTestUtils.invokeMethod(...) 이다.

 

해당 메소드에 3가지 인자가 필요하다.

 

  1. private method를 선언(구현)한 클래스
  2. 메소드 이름의 문자열
  3. 파라미터

위 3가지 매개변수를 넘기면 private method도 테스트 가능하다!

 

 

Comments