2021.04.16 - [Java] - [JAVA] 자바 라이브 스터디 4주차 과제 1 : 과제 참여율 구하기
이 포스팅에서 저는 private method를 테스트 했어야 했고 Reflection이라는 방식을 이용해서 조금은 복잡하게 테스트를 진행했습니다. 이렇게까지 복잡한 것을 보면 애초에 private method는 테스트 대상이 아닐지도 모른다는 생각에 자료들을 찾게 되었습니다.
public method만 테스트 하라
일반적으로 public interface를 구현한 public method 위주로만 테스트해야 합니다. 정확히는 private은 굳이 안 하는 게 맞습니다. 사실 private이잖아요. 애초에 테스트해야 될 이유가 없는 거죠. private method를 테스트해야 한다면 public method를 통해 간접적으로 테스트할 수 있습니다. 대부분의 사람들도 이 방식을 추천하고 계십니다.
클린 코드를 작성했다면 일반적으로 private method를 직접 테스트해야 될 일은 없다고 합니다. 설계 자체를 제대로 했는지 점검해보는 좋은 시간이 될 수 있겠군요.
해결 방법
softwareengineering.stackexchange.com/questions/100959/how-do-you-unit-test-private-methods
해당 글에서 여러 방법을 제시해주시는 데 몇 가지 정리해보겠습니다.
1. private 대신 protected를 사용해라.
private 보다는 접근 범위가 넓은 protected를 사용하기를 권장하는 답변이 있었습니다. 스프링 프로젝트 기준으로 클래스를 아래와 같은 경로에 클래스 파일들을 생성했다고 볼게요.
src/main/java/you/Class.java //클래스 파일 경로
src/test/java/you/ClassTest.java //테스트 클래스 경로
이 경우에는 protected method에 별 다른 과정을 거치지 않고 접근이 가능하다고 합니다. 제가 생각했을 때는 소스 코드에 적혀있는 패키지가 같으니 동일 패키지로 취급하나 봅니다.
2. Reflection 이용
3. public method로 간접 테스트
4. @VisibleForTesting 이용
테스트를 하고 싶은 private method 위에 @VisibleForTesting 어노테이션을 적어두면 reflection처럼 복잡하지 않고 코드도 깔끔하게 테스트가 가능하다고 합니다.
링크 글 본문을 읽어보시면 더 많은 도움이 되리라고 생각됩니다. 읽어주셔서 감사합니다.
'Java' 카테고리의 다른 글
객체지향 프로그래밍이란? (0) | 2021.04.30 |
---|---|
[JAVA] 자바 상속 (0) | 2021.04.26 |
[JAVA] 클래스 (0) | 2021.04.19 |
[JAVA] LinkedList,Stack.Queue 구현하기 (0) | 2021.04.17 |
[JAVA] 자바 라이브 스터디 4주차 과제 1 : 과제 참여율 구하기 (0) | 2021.04.16 |