inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Practical Testing: 실용적인 테스트 가이드

Q. 테스트에서만 필요한 메서드가 생겼는데 프로덕션 코드에서는 필요 없다면?

private method 테스트문의

613

jung

작성한 질문수 34

1

안녕하세요. 좋은 강의 잘 듣고 있습니다 ^^

 

강의에서 private method 테스트를 해야되는 상황이라면

객체를 분리해야되는 상황이라고 말씀을 주셨는데

실무에서는 꼭 분리를 해야되는 상황이 아닐수도 있을텐데

1)실무에서는 private method 에 대한 테스트는 거의 작성안하나요?

 2)레거시 프로젝트를 맡았을때 public method 에 대한 테스트를 작성하기에는 많은 작업이 필요하다면 private method 라도 테스트 코드를 작성하는게 좋을거 같은데 이런 경우도 작성을 안하나요?

3) private 함수를 변경하는경우 해당함수만 테스트하고 싶을거 같은데 이런경우는 어떻게하나요?

 

spring tdd jpa mockito 소프트웨어-테스트 junit5

답변 2

2

박우빈

안녕하세요, jung 님! :)
답변 드리겠습니다.

 

강의에서 private method 테스트를 해야되는 상황이라면

객체를 분리해야되는 상황이라고 말씀을 주셨는데

실무에서는 꼭 분리를 해야되는 상황이 아닐수도 있을텐데

일단 표현해주신 부분부터 이야기해보자면, private method를 테스트하고 싶다는 생각이 드는 것 자체가 객체 분리의 신호탄입니다.
실무라서 꼭 분리를 하면 안되는 상황이 있는 것은 아닙니다.
오히려 학습 프로젝트가 아니라 실무이기 때문에 더더욱 테스트 코드를 작성하여 안정성을 확보하고, 이를 기반으로 객체를 분리하면서 리팩토링을 시도해야 하는 것이죠. (미래를 위해서요)
애초에 잘 설계되어 각각의 의미와 역할이 명확한, 추상화가 잘 된 public 메서드와 내부 private 메서드라면, public 메서드의 테스트 만으로도 충분히 private 메서드까지 테스트를 할 수 있습니다.

1)실무에서는 private method 에 대한 테스트는 거의 작성안하나요?

위 답변으로 갈음할 수 있을 것 같아요. :)

2)레거시 프로젝트를 맡았을때 public method 에 대한 테스트를 작성하기에는 많은 작업이 필요하다면 private method 라도 테스트 코드를 작성하는게 좋을거 같은데 이런 경우도 작성을 안하나요?

먼저 public 메서드의 테스트를 최대한 시도하는 것이 맞고요.
public 메서드가 비대하여 테스트를 작성하기가 정말 어렵다면 private 메서드를 임시로 공개적으로 public 선언하여 테스트를 작성한 뒤에, 가능한 영역부터 리팩토링을 시도하는 방법을 사용해 볼 수 있을 것 같아요.

3) private 함수를 변경하는경우 해당함수만 테스트하고 싶을거 같은데 이런경우는 어떻게하나요?

강의에서 말씀드린 것처럼 private 메서드의 변경 사항은 public 메서드의 테스트 케이스로 체크가 가능해야 합니다.
변경한 private 메서드의 테스트를 하고 싶은 마음이 든다면, private 메서드의 크기나 역할이 너무 큰 상태는 아닌지 점검해보고, 객체를 분리하는 등의 시도를 해볼 수 있을 것 같아요.

감사합니다. :)

0

인프런 AI 인턴

안녕하세요 jung 님, 인프런 AI 인턴이에요.
1) 실무에서는 private method에 대한 테스트를 작성하는 경우가 상대적으로 적을 수 있습니다. 일반적으로 private method는 public method를 통해 간접적으로 호출되기 때문에, public method의 테스트로 충분히 커버할 수 있는 경우가 많습니다.

  1. 레거시 프로젝트를 맡았을 때, public method에 대한 테스트 작성에 많은 작업이 필요하다면 private method에 대한 테스트를 작성하는 것도 좋은 방법일 수 있습니다. 하지만 중요한 것은 테스트 대상을 어떻게 선택하는가입니다. 변경이 필요한 기능을 정확히 파악하고, 해당 기능과 관련된 public method에 대한 테스트를 우선 작성하는 것이 좋습니다.

  2. private 함수를 변경하는 경우, 해당 함수만 테스트하고 싶다면 보통은 해당 private 함수를 호출하는 public method에 대한 테스트를 작성합니다. 그렇게 함으로써 private 함수의 로직 변화가 public method를 통해 확인 가능하게 되므로, 테스트 커버리지를 좀 더 확보할 수 있습니다. 만약 특정 private 함수에 대한 테스트가 필수적인 경우라면, 테스트를 위해 해당 private 함수를 호출할 수 있는 다른 public method나 테스트 전용 메소드를 추가할 수 있습니다.
    감사합니다!

private 상수 테스트 관련 질문

0

83

1

void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??

0

126

2

커버리지는 어떻게 활용하시는지 궁금합니다.

0

161

2

테스트 문서화 질문입니다

0

105

2

단위테스트 질문이 있습니다

0

96

2

컨트롤러는 모킹을 한 이유가 궁금합니다.

0

103

2

ERD 가장자리에 있는 도메인 테스트 질문

0

89

2

DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?

0

135

2

OrderCreateRequest DTO에 대해서 궁금한점

0

102

2

고전파의 테스트 대역 사용 대상, 공유 의존성

0

156

2

계층 관련 질문이 있습니다.

0

139

3

'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다

1

124

2

혹시 update 로직은 어떻게 테스트하나요? (@Setter?)

0

134

2

단위테스트와 통합테스트의 경계가 궁금합니다.

0

228

2

Service+Repository 통합테스트 관련 질문입니다.

0

150

2

OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요

0

185

2

test 용 .yml

0

90

2

throws Exception

0

80

2

카페키오스크 클래스 문의 ,,

0

89

2

Rest docs 문서용 테스트코드를 따로 작성해야 되나요?

0

174

2

테스트 코드에서 필요한 생성자

0

138

1

tearDown 순서

0

116

2

@Builder 생성자 private

0

136

2

@DisplayName gradle / intellJ

0

93

2