2008-09-15 15 views
5

프로그램 (또는 함수)의 실제 출력과 참조 출력 간의 diff를 볼 수있는 Perl 모듈이 있습니까? 차이점이 있으면 테스트가 실패합니다.회귀 테스트를위한 Perl 보조 도구

차이점이 있지만 출력이 OK 인 경우 (기능이 변경 되었기 때문에) 향후 출력으로 실제 출력을 커밋 할 수 있기를 원합니다.

+0

Test :: FileReferenced는 출시 된 이후 내가 찾던 것과 가깝습니다. – Bart

답변

4

필자는 Test :: Simple 및 Test :: More 기능을 더 많이 사용하는 경향이 있습니다. 필자는 PerlUnit을 살펴 보았고 Test :: Simple 및 Test :: More 라이브러리를 사용하여 표준 라이브러리에 이미 내장 된 많은 기능을 제공하는 것으로 보인다.

+0

또한 Test :: More를 사용합니다. OO 측에서는 Perlunit보다 Test :: Class가 많이 사용된다고 생각합니다. – asksol

11

Perl은 테스트를 수행하는 데 훌륭한 유틸리티를 제공합니다. 가장 일반적으로 사용되는 모듈은 아마도 Test :: More이며 회귀 테스트를 작성하는 데 필요한 모든 인프라를 제공합니다. prove 유틸리티는 테스트 스위트를 실행하고 결과를 요약하기위한 쉬운 인터페이스를 제공합니다. Test :: Differences 모듈 (Test :: More과 함께 사용 가능)은 여러분에게 유용 할 수 있습니다. 차이점을 나란히 비교합니다. 실제 출력물을 새로운 참조 자료로 사용하는 것은 테스트중인 코드가 출력을 제공하는 방식과 캡처 방식에 따라 달라집니다. 파일에 쓰고 비교하면 쉽습니다. 그렇다면 테스트 스위트 내에서 Text :: Diff 모듈을 사용하는 것이 좋습니다.

2

프로그램의 출력을 테스트 할 때는 Test::Command입니다. 프로그램의 stdout 및 stderr (및 종료 값)를 쉽게 확인할 수 있습니다. 예 :

use Test::Command tests => 3; 

    my $echo_test = Test::Command->new(cmd => 'echo out'); 

    $echo_test->exit_is_num(0, 'exit normally'); 
    $echo_test->stdout_is_eq("out\n", 'echoes out'); 
    $echo_test->stderr_unlike(qr/something went (wrong|bad)/, 'nothing went bad') 

모듈에는 원하는대로 기능하는 인터페이스도 있습니다.

2

커뮤니티 표준 작업 도구는 Test :: Simple (테스트 시작하기) 및 Test :: More (일단 Test :: Simple이 당신을 위해 할 수있는 것 이상을 원한다면)입니다. 두 가지 모두 기대치와 실제 결과의 개념을 바탕으로 만들어지며, 둘 다 발생할 때 차이점을 보여줍니다. 이 모듈들을위한 perldoc은 당신을 도울 것입니다.

또한 Perl QA wiki을 확인하고 펄 테스트에 관심이 있다면 perl-qa 메일 링리스트를 살펴볼 가치가 있습니다. 일반적으로 Perl 테스트 시스템을 만드는 방법 언어 내의 시스템을 사용합니다.

마지막으로 module-starter 도구 (Module :: Starter의 모듈 스타터 도구)를 사용하면 새로운 작업 또는 기존 코드를 삭제하는 데 필요한 "CPAN 표준"레이아웃을 제공 할 수 있습니다.

6

앞서 언급했듯이 Test :: Differences는이를 수행하는 표준 방법 중 하나이지만 PerlUnit에 대해서는 언급해야합니다. 사용하지 마십시오. 그것은 "abandonware"이며 표준 Perl 테스트 도구와 통합되지 않습니다. 따라서, 새로운 모든 테스트 모듈이 나오기 위해서는 사용하려는 경우 해당 기능을 이식해야합니다. (누군가가이 버려진 모듈의 유지 보수를 집어 들었을 때 한 줄을 버리십시오. PerlUnit과의 통합을 돕고 자하는 핵심 테스트 도구를 유지하면서 그들과 이야기해야합니다).

면책 조항 : Id는 그것을 쓰지 않았지만 현재 Test :: Differences를 유지하므로 편향 될 수 있습니다.

3

나는 PerlUnit의 사용을 권장하는 사람들에게 질문한다. 3 년 내에 석방되지 않았습니다. xUnit 스타일의 테스트를 원한다면, Test::Class을 봐라. 똑같은 일을하지만 더 영어로 말이다. 그것이 여전히 유지되고 있으며 정규 릴리스가 있다는 사실은 상처를주지 않습니다.

프로젝트에 적합한 지 확인하십시오. 어쩌면 좋은 오래된 Test::More 만 있으면 충분합니다 (대개는 나를위한 것입니다). "왜 테스트 [클래스] 섹션을 사용하지 않는 것이 좋을까요?