답변:
테스트가 충분한 지 여부를 확인하기 위해 테스트에 의해 유도 된 코드 범위와 분기 범위를 확인할 수 있습니다 (커버리지 도구를 사용하거나 코드 경로를 수동으로 검토하거나 디버거를 사용하여).
결론에 따르면 서브 클래스에 대한 테스트는 기본 클래스 코드에 대해 충분히 높은 적용 범위를 제공하므로 추가 테스트를 추가해도 큰 이점은 없습니다. 반면에 기본 경로를 사용하여 특정 테스트를 추가하여 테스트 할 수있는 코드 경로가있는 경우이 경로를 따라 가야합니다.
"기본 클래스를 직접 테스트"하는 또 다른 이유는 "독립적으로"해당 클래스의 특정 기능을 테스트하려는 것입니다. 때로는 해당 메소드를 사용하는 서브 클래스의 메소드를 호출하여 해당 메소드를 간접적으로 테스트하는 대신 특정 메소드에 대해 직접 테스트 케이스를 설계하는 것이 더 쉬울 수 있습니다.
일반적인 사용 시나리오 가 서브 클래스를 파생 시키는 일반 기본 클래스가있는 경우 기본 클래스는 추상적 일 수 있습니다. 따라서 이러한 클래스를 테스트하려면 어쨌든 파생을 만들어야합니다. 이 상황에서 "기본 클래스를 직접"테스트한다는 것은 물론 테스트 목적으로 만 특별한 파생을 추가하는 것을 의미 할 수 있습니다.
프로그래머를 위해 자동화 된 테스트가 작성되었으며 테스트를 수행하기 위해 프로그래머가 작성되지 않았습니다.
우리는 생산성을 높이고 고객이 불만을 제기하는 "문제"수를 줄이기 위해 테스트를 거쳤습니다.
따라서 각 서브 클래스의 모든 사례를 다루는 행동 지향적 단위 테스트가 있으므로 기본 클래스를 직접 테스트하는 고객에게는 이점이 없습니다. 이것은 기본 클래스의 일부 코드를 변경하고 테스트가 실패하는지 확인 하는 등의 방법 으로 확인할 수 있습니다 ( 예 : 코드 줄을 일반화하거나 "if 문"에 "not"추가). (모든 코드 줄이 테스트에 포함되는지 확인하는 것만으로는 충분하지 않습니다.)
그런 다음 테스트를 통해 생산성을 높일 수 있는지 묻습니다 . 이것은 몇 가지 방법으로 발생할 수 있습니다.
따라서 하위 클래스가 작동한다고 가정하면 기본 클래스에 대한 직접 테스트를 작성하는 데 아무런 요점이 없습니다. 이러한 테스트를 초기 상태로 작성하면 이점이 없었던 것은 오늘날의 일이 아닙니다.