2013-07-20 4 views
2

컨텍스트 :Test :: More 및 친구들을 사용하여 상속 된 동작을 자동으로 테스트 할 수 있습니까?

는 (사슴 또는 유사하지, baseparent와 구식 상속을 사용하여) 내가 서로 상속 몇 가지 모듈을 말해봐. Foo::BarFoo을 상속하고 Foo::Bar::BazFoo::Bar을 상속합니다. 이 모든 모듈에는 Test::More으로 작성된 테스트 스위트가 있습니다. 하위 클래스 용 테스트 스위트는 구현하는 메소드 만 테스트합니다. 자식 클래스는 부모 클래스의 모든 메서드를 재정의하지 않지만 부모 클래스에는없는 새 메서드를 추가 할 수 있습니다.

질문 :

내가 그뿐만 아니라 테스트 서브 클래스 특정 행동 것입니다 테스트를 작성할 수있는 몇 가지 테스트 프레임 워크, 기술, 또는 Test::More 기능이 있는가, 또한 다음 상속 동작에 대한 테스트 스위트를 실행합니다/부모 클래스도? 기본적으로 하위 클래스의 고유 한/특수한 동작에 대한 테스트를 작성할 수있는 무언가를 찾고 있지만 하위 클래스가 해당 부모 클래스와 동일한 방식으로 테스트에서 동작하는지 확인합니다. .

나는 시도했다 :

내가 문자열 지정 모듈의 인스턴스를 구축하고 모듈의 유형에 따라 반대 테스트를 실행하는 발전기 방법으로 매우 간단한 테스트 프로그램을 작성했습니다 (하위 클래스/수퍼 클래스 계층 구조를 추적하는 중앙 해시가 있습니다.)하지만 이것은 미숙 한 것 같습니다. 나는 (Perl에서해야하는 대부분의 일과 마찬가지로) 다른 누군가가 이미 훨씬 더 우아하고 견고한 방식으로이 작업을 수행했다고 가정합니다.

답변

2

찾고있는 것은 Test::Class입니다.

Foo::Bar에 대한 테스트 클래스를 만들 수 있는데, 아마도 Test::Foo::Bar이라고합니다. 이 Perl 모듈은 Test::Class을 기본 클래스로 사용합니다. 하지만 그 대신 직접 테스트 Foo::Bar의, 방법을 통해 액세스 : 이것은 우리가 나중에 대체 할 수 있습니다

sub class {'Foo::Bar'} 

.

그런 다음 Test::Foo::Bar에서 상속받은 Test::Foo::Bar::Baz이라는 새 테스트 클래스를 만듭니다. 이렇게하면 부모 클래스에 대해 작성한 모든 테스트가 자동으로 상속됩니다. 물론 클래스()를 재정의해야합니다.

sub class {'Foo::Bar::Baz'} 

Voila! 이제 모든 테스트를 Test::Foo::Bar (Foo::Bar::Baz)에서 실행 중이므로 마음껏 내용을 무시하거나 새로운 테스트를 수행 할 수 있습니다.

색채는 자신의 블로그에 철저한 예를 가지고 Resuing Test Code with Test::Class

을 그리고 당신은 이미 기존의 테스트 하네스에 대한 맞아요. Test::Class, Test::Harnessprove의 혼합은 사용자의 요구 사항을 처리해야하며 사용자가 작성해야 할 이유가 거의 없습니다.