기본 클래스 Employee 에서 파생 된 클래스 Manager 가 있고 Employee 에 Manager 가 상속 한 getEmail () 메소드가 있다고 가정하십시오 . 관리자의 getEmail () 메소드 의 동작이 실제로 직원의 동작과 동일한 지 테스트해야합니까 ?
이러한 테스트가 작성 될 때의 동작은 동일하지만, 앞으로 어느 시점에서 누군가이 방법을 무시하고 동작을 변경하여 응용 프로그램을 중단 할 수 있습니다. 그러나 중간 코드 가 없는지 본질적으로 테스트하는 것은 약간 이상 합니다.
( Manager :: getEmail () 메서드 를 테스트 해도 Manager :: getEmail () 을 만들거나 재정의 할 때까지 코드 적용 범위 (또는 실제로 다른 코드 품질 메트릭 (?))가 향상되지 않습니다 .
대답이 "예"인 경우 기본 클래스와 파생 클래스간에 공유되는 테스트 관리 방법에 대한 일부 정보가 유용합니다.
질문의 동등한 공식 :
파생 클래스가 기본 클래스에서 메서드를 상속받는 경우 상속 된 메서드가 다음을 수행 할 것으로 기대하는지 여부를 어떻게 표현 (테스트)합니까?
- 베이스가 지금하는 것과 정확히 같은 방식으로 동작합니다 (베이스의 동작이 바뀌더라도 파생 된 메소드의 동작은 변하지 않습니다).
- 모든 시간 동안베이스와 정확히 같은 방식으로 행동하십시오 (기본 클래스의 동작이 변경되면 파생 클래스의 동작도 변경됨). 또는
- 그러나 원하는대로 동작하십시오 (이 메소드는 호출하지 않기 때문에이 메소드의 동작에 신경 쓰지 않습니다).
Manager
수업에서 파생 된 IMOEmployee
는 첫 번째 주요 실수였습니다.