작성
·
409
·
수정됨
1
안녕하세요. 좋은 강의 잘 듣고 있습니다 ^^
강의에서 private method 테스트를 해야되는 상황이라면
객체를 분리해야되는 상황이라고 말씀을 주셨는데
실무에서는 꼭 분리를 해야되는 상황이 아닐수도 있을텐데
1)실무에서는 private method 에 대한 테스트는 거의 작성안하나요?
2)레거시 프로젝트를 맡았을때 public method 에 대한 테스트를 작성하기에는 많은 작업이 필요하다면 private method 라도 테스트 코드를 작성하는게 좋을거 같은데 이런 경우도 작성을 안하나요?
3) private 함수를 변경하는경우 해당함수만 테스트하고 싶을거 같은데 이런경우는 어떻게하나요?
답변 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
안녕하세요 jung 님, 인프런 AI 인턴이에요.
1) 실무에서는 private method에 대한 테스트를 작성하는 경우가 상대적으로 적을 수 있습니다. 일반적으로 private method는 public method를 통해 간접적으로 호출되기 때문에, public method의 테스트로 충분히 커버할 수 있는 경우가 많습니다.
레거시 프로젝트를 맡았을 때, public method에 대한 테스트 작성에 많은 작업이 필요하다면 private method에 대한 테스트를 작성하는 것도 좋은 방법일 수 있습니다. 하지만 중요한 것은 테스트 대상을 어떻게 선택하는가입니다. 변경이 필요한 기능을 정확히 파악하고, 해당 기능과 관련된 public method에 대한 테스트를 우선 작성하는 것이 좋습니다.
private 함수를 변경하는 경우, 해당 함수만 테스트하고 싶다면 보통은 해당 private 함수를 호출하는 public method에 대한 테스트를 작성합니다. 그렇게 함으로써 private 함수의 로직 변화가 public method를 통해 확인 가능하게 되므로, 테스트 커버리지를 좀 더 확보할 수 있습니다. 만약 특정 private 함수에 대한 테스트가 필수적인 경우라면, 테스트를 위해 해당 private 함수를 호출할 수 있는 다른 public method나 테스트 전용 메소드를 추가할 수 있습니다.
감사합니다!