Perl Carp: признаться в юнит-тесте

Я пытаюсь написать Perl модульный тест. Я могу протестировать счастливый сценарий для этого. Однако, если в методе возникла ошибка, она печатает ошибку, используя Carp:confess "<message>", Я не могу поймать этот случай в моем тесте. Я пытался с помощью

dies_ok( <method call>, 'Expected Error' );

Однако контрольный пример все еще не проходит. Он печатает сообщение, переданное Carp::confess, а затем печатает

Looks like your test exited with 111 before it could output anything. Dubious, test returned 111 (wstat 28416, 0x6f00)

Есть ли способ, которым я могу поймать это? Я даже пытался throws_ok но не работает.

Пожалуйста, помогите, руководствуясь, как я должен поймать эти ошибки. Я использую это dies_ok а также throws_ok неправильно?

1 ответ

Вы можете просто проверить $@ после выражения eval.

use strict;
use warnings;

use Test::More;

use Carp qw(confess);

sub err { confess('Bad thing'); }

eval { err };
like($@, qr/^Bad thing/, "confess('Bad thing')");

done_testing();
Другие вопросы по тегам