해결된 질문
작성
·
449
·
수정됨
답변 1
3
안녕하세요. Summer Kim님
이런 경우 정답이 있다기 보다는 몇가지 선택지가 있습니다.
1. private 메서드를 테스트하지 않는다: 일반적으로 private 메서드는 공개 인터페이스를 통해 간접적으로 테스트됩니다. 즉, public 또는 protected 메서드를 통해 private 메서드의 동작이 올바르게 수행되는지 확인합니다. 이 접근 방식의 핵심 아이디어는 클래스의 공개 인터페이스가 올바르게 작동한다면, 내부 구현(즉, private 메서드)도 올바르게 작동한다고 가정하는 것입니다.
2. 리플렉션을 사용: 자바의 리플렉션 API를 사용하면 private 메서드에 접근하여 테스트할 수 있습니다. 하지만 이 방법은 코드의 복잡성을 증가시키고, 유지보수를 어렵게 만드는 단점이 있습니다.
JUnit 5와 ReflectionTestUtils, PowerMock 등을 사용하면 private 메서드를 테스트 할 수 있습니다
3. 패키지-프라이빗 접근 제한자 사용: private 대신 package-private (기본 접근 제한자, 아무 키워드도 사용하지 않음)를 사용하면, 같은 패키지 내의 다른 클래스들이 이 메서드에 접근할 수 있습니다. 단 이 방법은 테스트 코드를 같은 패키지 내에 위치시켜야 합니다. (패키지 위치만 같으면 됩니다.)
간단하게 정리해서 말씀드리자면 private 메서드는 테스트 하지 않는 방법이 가장 좋은 방법입니다. 하지만 그래도 꼭 private을 테스트 해야 하는 상황이라면 2,3번을 선택적으로 고려하시면 됩니다.
감사합니다.