매서드 캡슐화와 테스트 코드
선생님, 안녕하세요.
내부에서만 사용하는 매서드는 private으로 캡슐화 해두는 것이 좋은 구현이라고 알고 있고, 이번 수업에서도 그런 내용을 확인할 수 있었는데요,
private 매서드들도 테스트 코드를 작성해서 테스트 해보고싶은 경우가 자주 발생합니다... 이런 경우 고민을 하다가 몇 가지 방법이 있겠으나 ... 그냥 public 으로 열어버리고 테스트 코드를 두곤 했는데요, 이런 경우에 선생님은 실무에서 어떻게 하셨는지, 가장 좋은 practice가 무엇인지 알고 싶습니다.
항상 감사합니다..^^
답변 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번을 선택적으로 고려하시면 됩니다.
감사합니다.
질문있습니다
0
31
1
1번 문제 질문입니다.
0
36
1
음악플레이어 문제 중 코드질문
0
30
1
9장 상속 문제와 풀이 질문
0
41
1
강의 자료에 사소한 오타가 있습니다.
0
53
2
매서드 참조값 반환??
0
71
1
접근제어자 - 쇼핑카트 문제에서 상품출력 부분 메서드
0
77
1
자바 기본편 - .(dot)에 관한 질문입니다!
0
87
1
공부방법
0
79
2
상속관계에서 멤버 변수는 오버라이딩 되는 개념이 아닌가요?
0
82
1
static method 질문
0
68
1
캡슐화 문제풀이 ShoppingCart 요구사항에 문제가 있어보입니다. 피드백 주세요
0
100
1
Method1에서 Student 객체
0
75
1
3강 18. null 질문
0
71
1
this 와 super의 호출 순서는 부모-자식관계 떄문만인가요?
0
79
1
팩토리 메서드 패턴과 일반 생성자 사용의 장단점
0
100
1
문의
0
105
1
9장 상속 문제와 풀이 부분 궁금한게 있어서 질문드립니다
0
94
1
상속과 그에 따른 메모리 구조 질문
0
68
1
call메소드에서 멤버에 접근하는 방식을 이해 못 했습니다
0
77
1
수강기한
0
137
1
기본편 객체지향 프로그래밍에 대한 정의
0
90
1
섹션10 상속 메모리 구조 및 문제 관련 질문
0
90
1
추가 지식 학습
0
153
2





