Podczas uruchamiania pakietu testów aplikacji chcę promować wszystkie ostrzeżenia dotyczące kompilacji i czasu pracy w Perlu (np. Ostrzeżenie "Niezainicjowana zmienna") w przypadku błędów krytycznych, aby umożliwić I i innym programistom zbadanie i naprawienie kodu generującego ostrzeżenie. Ale chcę to zrobić tylko podczas programowania i testowania CI. W produkcji ostrzeżenia powinny pozostać ostrzeżeniami.W jaki sposób powinienem promować ostrzeżenia Perla do błędów krytycznych podczas programowania?
Próbowałem następujących czynności: W "t/lib" I stworzył TestHelper.pm modułu:
# TestHelper.pm
use warnings FATAL => qw(all);
1;
wówczas nazywano zestaw testów takiego:
$ PERL5LIB=$PERL5LIB:./t/lib PERL5OPT=-MTestHelper.pm prove -l t/*.t
Ale to nie miało pożądany efekt promowania wszystkich ostrzeżeń na błędy krytyczne. Dostałem ostrzeżenia jako normalne, ale ostrzeżenia nie wydają się być traktowane jako śmiertelne. Zauważ, że wszystkie moje skrypty test.t mają wiersz "użyj ostrzeżeń"; w nich - może to przesadza z tym w TestHelper.pm, ponieważ "ostrzeżenia o korzystaniu" mają zasięg lokalny?
Zamiast Robiłem to:
# TestHelper.pm
# Promote all warnings to fatal
$SIG{__WARN__} = sub { die @_; };
1;
To działa, ale ma zapachy kodu temat. Nie podoba mi się też, że bombarduje pierwsze ostrzeżenie. Wolałbym, aby pakiet testowy działał w pełni, rejestrując wszystkie ostrzeżenia, ale ostatecznie status testu się nie powiódł, ponieważ kod był uruchamiany z ostrzeżeniami.
Czy istnieje lepszy sposób na osiągnięcie tego wyniku końcowego?
Ten moduł jest dokładnie tym, czego potrzebuję, dzięki. Wiesz, że działa mniej więcej tak samo, jak sugeruje to friedo. :-) – Hissohathair
Niestety Test :: NoWarnings jeszcze nie działa poprawnie z "done_testing()", zobacz https://rt.cpan.org/Public/Bug/Display.html?id=66485 i https: // rt. cpan.org/Ticket/Display.html?id=52412 –