Perl에서는 전통적으로 테스트를 위한 모듈 패키지가 사용됩니다: Test::Simple, Test::More, 그리고 Test::Class, Test::Most와 같은 복합 프레임워크. 기본은 Test::More로, 이는 평등성 확인, 구조 비교, 예외 발생 테스트 등 풍부한 기능 세트를 제공합니다.
인기 있는 모듈의 분류:
Test::Simple — 아주 간단한 초보 테스트용;Test::More — 대부분의 프로젝트에 대한 사실상의 표준;Test::Exception, Test::Deep, Test::Warn — 추가적인 측면(예외, 중첩 구조, 경고)을 체크하기 위한;Test::Class, Test::Class::Moose — 객체 지향적 접근법.Test::More로 작성한 테스트 예시:
use Test::More tests => 2; is(2 + 2, 4, '합계가 작동합니다'); like('foo_bar', qr/foo/, 'foo가 있습니다');
Best practices:
모듈 Test::* 없이 Perl에서 자신의 테스트를 작성할 수 있나요? 단지 die/print 문을 사용하는 것이 가능합니다. 이러한 접근 방식의 위험은 무엇인가요?
답변: 공식적으로 가능합니다 — print와 die를 사용하여 자신의 "테스트"를 작성할 수 있습니다. 하지만 이 경우 자동화에 대한 올바른 접근 방식이 형성되지 않습니다: TAP/CPAN 통합이 지원되지 않으며, 보고서를 생성하고 여러 테스트를 분석하기가 어렵고, 테스트 기반의 확장성과 유지 관리에 어려움이 있습니다.
실패한 테스트 예시:
print '곱셈 성공 ' if multi(2,3) == 6; die '실패' if multi(2,0) != 0;
역사
오래된 프로젝트에서 테스트가 "수동으로" die와 print을 통해 작성되었습니다. CPAN 모듈의 자동 통합이 불가능했습니다 — 스크립트가 명확한 상태를 반환하지 않아 테스트 오류가 릴리스에서 누락되었습니다.
역사
Test::Simple과 Test::More의 사용을 TAP(테스트 어떤 것이든 프로토콜) 구조를 고려하지 않고 혼합하려는 시도가 출력 중단을 야기하여 자동 테스트 시스템이 위반되었습니다. 테스트 인프라 재설계가 필요했습니다.
역사
Test::Exception에 대한 좋은 테스트 커버리지의 부재는 입력 데이터 처리 오류를 누락하게 되었습니다: 모듈 중 하나가 예외를 올바르게 발생시키지 않았고, 이는 테스트 중에 발견되지 않아 결함이 프로덕션에 전달되었습니다.