Я рекомендую Test :: Fatal вместо Test :: Exception .
Test :: Exception существует уже долгое время, поэтому многиесуществующие тестовые наборы используют его, но Test :: Fatal легче освоить.Test :: Fatal экспортирует только 1 функцию: exception
.Это запускает связанный код и возвращает исключение, которое он выдал, или undef
, если он работал без ошибок.Затем вы проверяете это возвращаемое значение, используя любую из обычных Test :: More функций, таких как is
, isnt
, like
или isa_ok
.
Test :: Exceptionтребует, чтобы вы изучили его собственные функции тестирования, такие как throws_ok
и dies_ok
, и помните, что вы не должны ставить запятую между кодом и именем теста.
Итак, ваш пример будет:
use Test::More;
use Test::Fatal;
my $obj = ...;
isnt(exception { $obj->method($my, $bad, $params) },
undef, 'method dies as expected');
Или вы можете использовать like
, чтобы соответствовать ожидаемому сообщению об ошибке, или isa_ok
, чтобы проверить, выдал ли он правильный класс объекта исключения.
Test :: Fatal просто дает вамбольше гибкости с меньшей кривой обучения, чем Test :: Exception.