응용 프로그램 테스트 스위트를 실행할 때 나는 모든 Perl 컴파일 및 런타임 경고 (예 : "초기화되지 않은 변수"경고)를 치명적인 오류로 승격 시켜서 필자와 다른 개발자가 경고를 생성하는 코드를 조사하고 수정하려고합니다. 그러나 개발 및 CI 테스트 중에 만이 작업을 수행하려고합니다. 프로덕션 환경에서 경고는 경고로 유지되어야합니다. 개발 중 치명적인 오류에 대한 Perl 경고를 어떻게 홍보해야합니까?
# TestHelper.pm
use warnings FATAL => qw(all);
1;
는 다음과 같이 테스트 스위트라고 : "/ lib에 t"나는 모듈 TestHelper.pm 생성에서 :
나는 다음을 시도
$ PERL5LIB=$PERL5LIB:./t/lib PERL5OPT=-MTestHelper.pm prove -l t/*.t
을하지만이 없었어요 모든 경고를 치명적인 오류로 승격시키는 바람직한 효과. 정상적으로 경고를 받았지만 경고는 치명적인 것으로 취급되지 않았습니다. 모든 test.t 스크립트에는 "use warnings"행이 있습니다. 그 (것)들 - 아마 이것은 "사용 경고"가 국부적으로 범위이기 때문에 TestHelper.pm에 하나를 over-ride?
대신 내가 이런 짓을했습니다 는# TestHelper.pm
# Promote all warnings to fatal
$SIG{__WARN__} = sub { die @_; };
1;
이 작동하지만 그것에 대해 코드 냄새가 있습니다. 나는 또한 그것이 첫 번째 경고에서 폭탄을 터뜨리는 것을 좋아하지 않는다. 차라리 테스트 스위트가 전부 실행되어 모든 경고가 기록되지만 코드가 경고와 함께 실행 되었기 때문에 테스트 상태가 결국 실패했습니다.
이 최종 결과를 얻는 더 좋은 방법이 있습니까?
이 모듈은 내가 필요한 것입니다. 감사합니다. friedo가 위와 같이 제안한 것과 거의 동일하게 작동한다는 것을 알고 있습니다. :-) – Hissohathair
불행히도 Test :: NoWarnings은 "done_testing()"과 함께 제대로 작동하지 않습니다. https://rt.cpan.org/Public/Bug/Display.html?id=66485 및 https : // rt를 참조하십시오. cpan.org/Ticket/Display.html?id=52412 –