test 작성하다 private 메소드를 만났음....

 

처음 접해본 private아이들......엄청 당황했지만....역시 구글!!!
...사실 private 은 안하는거라고 하지만.......커러버리 60% 이상해야해서 할수있는건 모두해야했다.....생각보다 달성 어려움...
1. 리턴타입이 있는것

class 별세계 {
    private int 동물원(int 지역코드, spring  지역명){
        .
        .
        .
        return 동물수;
    }

}
    //test클래스에 Mock객체로 미리 별세계를 선언함....
    @Autowired
    pvivate 별세계 별세계;

    //private 메소드를 사용할꺼라고 선언했다.\
    Method method = 별세계.getClass().getDeclaredMethod("동물원", int.class, spring.class);
    method.setAccessible(true);

    //given 
     int 지역코드 = 1234;
     spring 지역명 = "경상도";

    //when
    int 동물수 = (int)method.invoke(별세계, 지역코드, 지역명);

    //then 리턴값 자체를 확인하기 어렵다면
    assertThat(동물수).isNotNull();
    
    //또는 리턴값이 확인되어 정확히 일치하는지까지 원한다면
    int 동물수 = ReflectionTestUtils.invokeMethod(별세게, 동물원, 지역코드, 지역명)
	assertThat(동물수,is(동물수의 값));  //isEqualTo와 같은 기능

 

2. 리턴타입 없는 것.... 이건 정말 까다롭니다...verify가 있다고 하는데

 private에 리턴값이 없으니 test 결과를 어떻게 해야할지...한참을 해맸고..

https://effortguy.tistory.com/144

 

[Java] Mockito 사용법 (4) - 검증 (Verify)

이번 포스팅에선 Mockito를 이용해 스터빙한 메소드가 제대로 실행이 됐는지 확인해보는 메소드에 대해서 알아보겠습니다. 스터빙한 메소드를 검증하는 방법 verify 메소드를 이용해서 스터빙한

effortguy.tistory.com

방법도 있었으나.....이것도 void는 몰라도 private은 검색 어려웠다.

검색 끝에 

class 별세계 {
    private void 동물원(int 지역코드, spring  지역명){
        .
        .
        .
        send.내가 좋아하는 동물(호랑이);
	}       
}

}
 
//then 
  try {
    	method.invoke(service, unsuitableInfo, totalActionCount);
  } catch (Exception e) {
   	 e.printStackTrace();
  }

이건 사실 미완성이다....된다고 한게 아니라..일단 test만 통과하게 값을 채운거라서.......

다른 방법이 있다면 알려주세요~~~~~~제발~~~~

'junit TEST' 카테고리의 다른 글

Junit Test builder()  (0) 2023.02.22
Test 연습하기  (0) 2023.02.01
TEST 로 --일단은 환경설정과 싸움/..완성시키기  (0) 2022.11.16
JUNIT TEST 하기  (0) 2022.11.09

+ Recent posts