[소프트웨어공학] Should we test private methods?
우리는 비공개 메소드들도 시험해야 하나요? 우리는 테스트를 어떻게 해야 하나요? 소프트웨어 공학은 이에 대한 해답을 제시합니다. 단위(이를테면 클래스)부터 통합, 배포, 인수 등 다양한 측면에서의 시험을 수행해야 합니다. 중요한 것은 자동화된 테스트여야 한다는 것이죠. 세상에는 자동화된 테스트를 위한 다양한 테스트 프레임워크가 존재합니다. 대표적으로 XUnit이 있죠. 자바의 경우, JUnit입니다. JUnit JUnit이 제공하는 클래스와 메소드들은 테스트 드라이버로서 작동하는 것들입니다. 즉, 우리가 만든 대상 클래스들의 객체를 생성하고, 그들의 메소드들을 호출하여 예측 값과 실제 값을 맞추어보는 것이죠. 다음 코드는 JUnit의 사용 예제입니다. Multiplier 객체를 생성해, multiply()의 인자에 3과 5를 주면 15를 반환하는지를 확인하죠. public class Multiplier { public int multiply ( int a , int b ) { int result = 0 ; for ( int i = 0 ; i < b ; i ++) { result += a ; } return result ; } } public class MultiplierTest { @Test public void testMultiply () { Multiplier multiplier = new Multiplier (); assertEquals ( 15 , multiplier . multiply ( 3 , 5 )); } } 복잡한 클래스의 테스트 복잡한 메소드의 경우, 수많은 비공개 메소드들을 호출합니다. 이들 역시 단위로 나누어 테스트하면 좋지 않겠습니까? 하지만 객체지향 언어의 특성상 다른 클래스는 해당 메소드들을 호출할 수 없습니다. 따라...