테스트 진행시 Private 메소드 호출하기.
TDD 코드를 작성하는데, Private 메소드는 아주 귀찮은 존재입니다.
잠시 public 으로 바꿔서 테스트 하거나 또는 리플렉션을 사용하여 실행 시키는 방법등이 있는데, 여러가지로 피곤함을 가중시켜요.
그러나 이런 문제를 해결하기 위한 PowerMock 과 같은 도구가 있습니다!!
https://code.google.com/p/powermock/
하지만, Android 테스트에서 Robolectric 과 Mockito 를 사용하는데, 여기다가 PowerMock 까지 붙이면 Exception 을 뿜으며 문제가 생기네요.
(혹시 문제 해결책을 아시는 분 있으면 알려주십쇼..ㅠㅠ)
어쨌든 위와 같은 문제를 해결 하느라 약간의 삽질을 하다가, 허접하게 나마 아래와 같이 좀 더 편하게 private 메소드를 실행시킬 수 있는 코드를 짜봤는데요,
이 것을 이용하면 private 메소드에 대하여 그럭저럭 테스트는 진행할 수 있습니다.
다만, 아직 null 인자값을 받을 수 없고, 가변 인자값도 사용할 수 없습니다.
이 문제가 개선되는 대로 업데이트 할 것입니다.
사용 방법.
// 인자값이 없는 static 메소드. // 메소드의 반환 값이 없을 경우 null 을 반환. Object 반환값 = invokeStatic(클래스.class, "메소드명"); // 인자값이 있는 static 메소드. Object 반환값 = invokeStatic(클래스.class, "메소드명", 인자값1, 인자값2... ); // 인자값이 없는 메소드. Object 반환값 = invoke(객체, "메소드명"); // 인자값이 있는 메소드 Object 반환값 = invoke(객체, "메소드명", 인자값1, 인자값2... );