2011-08-05 4 views
1

가상 메서드에서 동작하는 C# 추상 클래스가 있습니다. 나는 그 가상 메소드 (그 문제가 아니라 그 메소드가 호출 될 때)에서 그 동작을 단위 테스트 할 필요가있다.추상 클래스에서 가상 메소드를 단위 테스트하는 방법은 무엇입니까?

1) 추상 클래스
2의 더미 구현을 작성) 또 다른 옵션 누군가가 여기

을 지적) 아이 구현 당 중복 검사)
3 (가상 메서드를 호출 어린이를 사용 : 나는 세 가지 옵션 참조

# 1쪽으로 기울고 있습니다. 이 동작을 테스트하는 가장 현명한 방법입니까?

답변

4

이상에만 을 테스트하고 싶다면 더미 구현을 만드십시오. 조롱 (mocking) 클래스를 지원하는 조롱 (mocking) 프레임 워크를 사용하고 있다면 아마도 가장 쉬운 방법 일 것입니다. 가상 메서드가 추상 클래스에 정의 된 추상 (또는 가상) 메서드를 호출하면 조롱 프레임 워크는 해당 호출이 발생했는지 확인하도록 허용합니다. (반대로, 추상 클래스와 그 자식 사이에 관련된 정확한 프로토콜을 테스트하는 것보다 결과에 더 관심이 있다면 스터브을 만들기 위해 조롱 프레임 워크를 사용할 수 있습니다.)

+0

나는 추상적 인 클래스의 인스턴스를 제공하는 Rhino Mocks를 사용하고 있습니다. 그러나 나는 그 인스턴스에서 가상 메소드를 실행하도록 /하지 않겠다. 무조건적으로 출력 유형의 기본값을 리턴합니다. 관련 항목 : http://stackoverflow.com/questions/6960459/rhino-mock-an-abstract-class-w-o-mocking-its-virtual-method – lance

1

개인적으로 항상 자식 구현마다 중복 테스트를 만듭니다. 이런 식으로 누군가가오고 자식 클래스의 메서드를 재정의하면 테스트를 중단하고 다시 작성해야한다는 것을 알게됩니다. 약간의 추가 적용 범위.

1

궁극적으로 기본 클래스가 새로운 기본 구현을 구현해야하는 이유에 대해 질문해야합니다. 어쩌면 당신은 위임해야합니까? 왜 모든 수업에 영향을 미치는 행동을 수정하고 있습니까? 모든 아이들이 상속해야 동작을 ... 수정해야하는 경우

그러나

은 제어 시험과 더미 (dummy)를 사용하여 1 개, 2 테스트를 결합합니다.

그런 다음 실제 동작과 함께 작동하는지 적어도 하나의 실제 사용법을 사용하여 테스트하십시오.

어린이를 작성하는 개발자는 자신의 행동을 책임집니다.

궁극적으로 누군가는 그 아이를 손상시키지 않도록 배포 전에 모든 기존 아이와 함께 작동해야합니다.하지만 기본 클래스 구현이 유효하다는 것이 입증되면 변경 사항은 기본 클래스.

관련 문제