2015-11-19 2 views
2

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

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

Однако тест до сих пор не удается. Он печатает сообщение передается Карп :: сознаться, а затем печатает

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 неправильно?

+2

Вы связали вызов метода в анонимном суб? – Miller

+0

Нет, я не ... Я сделал это, и это сработало ... Не могли бы вы объяснить, почему анонимный суб должен быть инкапсулировать вызов? Я не совсем понимаю, что ... Также вы можете отправить объяснение в качестве ответа, чтобы я мог его принять. Спасибо :) – learningMyWayThru

ответ

1

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

use strict; 
use warnings; 

use Test::More; 

use Carp qw(confess); 

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

eval { err }; 
like([email protected], qr/^Bad thing/, "confess('Bad thing')"); 

done_testing();