2010-12-07 7 views
0

템플릿 메서드가 나를 위해 할 수있는 작업을 좋아합니다. 반복적으로 반복 작성해야하는 코드를 크게 단순화하는 데 사용할 수 있기 때문입니다.템플릿 메서드가있는 공동 작업자를 사용하는 테스트 클래스

그러나, 나는 공공 템플릿 메소드가 협력자에 의존하는 클래스를 테스트하기 매우 힘든 시간을 가지고있다. 실제 문제는 가상 일 수 없기 때문에 의존성과 스터 빙을 서브 클래 싱하는 일반적인 방법이 작동하지 않는다는 것입니다.

현재, 내 솔루션은 다음, 지원되는 모든 유형을 포함하는 비 템플릿 인터페이스를 생성 구현 세부로 템플릿을 사용하는 것입니다. 이것은 테스트 가능하지만 많은 클래스를 통과하는 많은 수의 유형에 대해 업데이트하는 것이 지루합니다. 나는 또한 상속 기반의 다형성을 대신 사용하도록 다시 설계 할 수 있다고 생각하지만, 시스템 재 디자인없이 테스트 문제를 해결할 수 있다면 그것을 선호한다.

나는 내 생산 라이브러리 대 내 테스트 라이브러리의 동작을 변경하기 위해 템플릿 특수화를 사용하여 할 수있는 일이있을 수 있습니다 생각했지만, 그 효과 ... 또는 가능하다면 확실하지 않다.

그래서, 종속성에서 템플릿 방법을 사용하여 테스트 클래스의 가장 좋은 방법은 무엇입니까?

답변

1

Google mock framework는 템플릿 매개 변수와 함께 모의를 만들 수있는 방법을 제공합니다. 그런 다음 템플릿 기반 클래스를 추가하고 mock 객체를 테스트중인 클래스의 생성자에 전달해야합니다.

+0

그게 좋은 생각입니다. Google Mock을 사용하고 있습니다. 테스트중인 클래스를 템플릿으로 바꾸는 것은 여전히 ​​성가시다.하지만 확실히 유력한 대안처럼 들린다. – cgmb

0

저는 이것을 더 자세히 조사하고 싶었 기 때문에 생각하고 있던 템플릿 전문화 솔루션을 사용해 보았습니다. 이렇게 할 수는 있지만 여전히 고통이 있습니다. 템플릿 전문화에 대한 큰 제한은 템플릿에 대한 참조가 만들어지기 전에 완료되어야한다는 것입니다. 기본적으로 이것은 프로덕션 코드와 동일한 헤더 파일에서 테스트에 사용 된 모든 유형의 조롱을해야한다는 것을 의미합니다. 이는 단순한 유형에서는 충분하지 않지만 다른 라이브러리의 클래스에서는 전문화 된 유형을 정의해야하므로 까다로울 수도 있고 불가능할 수도 있습니다.

따라서, 나는 템플릿 특수화 단위 테스트하는 기능을 조롱하는 가능한 방법이라고 생각하지 않습니다. 테스트중인 클래스를 템플릿으로 만들고 모의 버전을 생성하기 위해 Google 모의 객체를 사용하는 것이 비 템플릿 인터페이스를 정의하는 것에서 유일한 합리적인 해결책으로 보인다.

관련 문제