유용한 테스트 케이스를 위한 개발자의 자세
(meetup.toast.com)테스트는 현대 소프트웨어 개발에서 빠질 수 없는 요소입니다만, 테스트 케이스 또한 결국은 개발자가 작성하는 코드이므로 때에 따라 문제가 발생할 수 있습니다. 객체지향적 관점에서 ‘유용한’ 테스트 케이스에 관해 살피는 글을 소개합니다. (한국어)
요점은 테스트가 [캡슐화된 다른 모듈을 테스트할 책임을 지닌 모듈]이라는 점입니다. 그 말은 테스트 또한 엄연히 개발하는 코드의 일부이므로 (객체지향적 패러다임에서) 객체지향의 원칙을 준수하며 지속적으로 개선하고 리팩토링해야 함을 의미합니다. 그렇다면 테스트 케이스는 테스트 대상 모듈의 구체적인 내부 요소(private 메소드 등)에 접근하거나 의존해서는 안 된다는 점도 SOLID 원칙에 의해 유추할 수 있습니다. 테스트 케이스가 점검해야 하는 것은 어디까지나 해당 모듈의 추상적인 책임이어야 하므로, 이를 반영하는 그 모듈의 외부 인터페이스를 통해서만 테스트가 이루어져야 합니다.
개인적으로는 이 내용이 프로그래밍 초보자가 넘어야 할 여러 산 중 하나가 아닌가 싶습니다. 저도 객체지향을 처음 배울 때 강의에서 “private 메소드를 직접 테스트해서는 안 된다”는 것과 그 이유에 대한 설명을 듣긴 했지만, 솔직히 그때는 제대로 이해를 못 했었거든요. 위 내용에 관해 어느 정도 이해하게 된 것은 그로부터 한참 지난 뒤였습니다.