클래스 / 모듈 / 패키지 등의 내부 / 개인 구성 요소를 어느 정도 테스트합니까? 그것들을 전혀 테스트하거나 외부 세계에 대한 인터페이스를 테스트합니까? 이러한 내부의 예는 개인용 메소드입니다.
예를 들어, 하나의 중앙 프로 시저에서 호출 된 여러 내부 프로 시저 (함수 / 방법)가 있는 순환 재귀 파서가 있다고 가정하십시오 . 외부 세계와의 유일한 인터페이스는 문자열을 가져와 구문 분석 된 정보를 반환하는 중앙 프로 시저입니다. 다른 프로시 저는 문자열의 다른 부분을 구문 분석하며 중앙 프로 시저 또는 다른 프로 시저에서 호출됩니다.
당연히 외부 인터페이스를 샘플 문자열로 호출하고 수동으로 구문 분석 된 출력과 비교하여 테스트해야합니다. 그러나 다른 절차는 어떻습니까? 하위 문자열을 올바르게 구문 분석하는지 확인하기 위해 개별적으로 테스트 하시겠습니까?
몇 가지 주장을 생각할 수 있습니다.
찬성 :
- 더 많은 테스트가 항상 더 좋으며 이는 코드 적용 범위를 높이는 데 도움이 될 수 있습니다
- 일부 내부 구성 요소는 외부 인터페이스에 입력을 제공하여 특정 입력을 제공하기가 어려울 수 있습니다 (예 : 에지 사례)
- 보다 명확한 테스트. 내부 구성 요소에 (고정 된) 버그가있는 경우 해당 구성 요소에 대한 테스트 사례를 통해 해당 특정 구성 요소에 버그가 있음을 알 수 있습니다
단점 :
- 리팩토링은 너무 고통스럽고 시간이 많이 걸립니다. 변경하려면 외부 인터페이스 사용자가 영향을받지 않더라도 단위 테스트를 다시 작성해야합니다.
- 일부 언어 및 테스트 프레임 워크에서는 허용되지 않습니다
당신의 의견은 무엇입니까?