개발 관련/개인 자료

테스트 진행시 Private 메소드 호출하기.

snoworca 2015. 4. 29. 14:13

TDD 코드를 작성하는데, Private 메소드는 아주 귀찮은 존재입니다.

잠시 public 으로 바꿔서 테스트 하거나 또는 리플렉션을 사용하여 실행 시키는 방법등이 있는데, 여러가지로 피곤함을 가중시켜요. 

그러나 이런 문제를 해결하기 위한  PowerMock 과 같은 도구가 있습니다!! 


https://code.google.com/p/powermock/


하지만, Android  테스트에서 Robolectric 과 Mockito 를 사용하는데, 여기다가 PowerMock 까지 붙이면 Exception 을 뿜으며 문제가 생기네요.

(혹시 문제 해결책을 아시는 분 있으면 알려주십쇼..ㅠㅠ)


어쨌든 위와 같은 문제를 해결 하느라 약간의 삽질을 하다가, 허접하게 나마 아래와 같이 좀 더 편하게 private 메소드를 실행시킬 수 있는 코드를 짜봤는데요, 

이 것을 이용하면 private 메소드에 대하여 그럭저럭 테스트는 진행할 수 있습니다.

다만, 아직 null 인자값을 받을 수 없고, 가변 인자값도 사용할 수 없습니다.

이 문제가 개선되는 대로 업데이트 할 것입니다.


invoke.zip



사용 방법.

// 인자값이 없는 static 메소드. // 메소드의 반환 값이 없을 경우 null 을 반환. Object 반환값 = invokeStatic(클래스.class, "메소드명"); // 인자값이 있는 static 메소드. Object 반환값 = invokeStatic(클래스.class, "메소드명", 인자값1, 인자값2... ); // 인자값이 없는 메소드. Object 반환값 = invoke(객체, "메소드명"); // 인자값이 있는 메소드 Object 반환값 = invoke(객체, "메소드명", 인자값1, 인자값2... );