2016-03-14 4 views
-1

Я пытаюсь создать единичный тест для этой подпрограммы ошибки, показанной ниже. Этот метод принимает имя ошибки и выводит сообщение, значение которого находится в каждой ошибке. Это код, у меня есть:Как создать единичный тест в Perl?

use constant { 
     # link included as a variable in this example 
     ERROR_AED => { 
     errorCode => 561, 
     message => {"this is an error. "}, 
     tt => { template => 'disabled'}, 
     link => 'www.error-fix.com', 
     }, 
}; 


sub error_post { 

    my($error) = @_; 
    printf ($error->{ message });  
} 

error_post(ERROR_AED); 

Это был мой подход, я уверен, что это неправильно, я пытался проверить входные значения, или в более общем случае проверить, что это была ошибка, которая была передана в метод error_post ,

#verifying input values 

sub test_error_post { 
    ok(defined $error, 'Should have an input value'); # check that it's a constant 
    ok($error->isa(constant) , 'Error should be of type constant'); 
    ok($error->errorCode), 'Should contain key errorCode'); 
    ok($error->message), 'Should contain key message'); 
    ok($error->tt), 'Should contain key tt'); 
    ok($error->wiki_page) 'Should contain key wiki page');  
} 

Я знаю, что это, вероятно, далеко.

+1

У вас есть отклоненные круглые скобки на последних четырех строках. Отредактируйте его так, чтобы, по крайней мере, у вас есть что-то, что компилируется. – mob

+2

Вам также не хватает полуколонии после 'use constant {...}' и вы забыли цитаты вокруг 'www.error-fix.com'. Пожалуйста, не изобретайте код, который вы фактически не используете, и введите его непосредственно в поле вопроса; создайте [mcve] и скопируйте-вставьте его дословно. (Это просто общий совет, кстати, я вижу, что вы спрашиваете о правильном подходе, а не об ошибках компиляции.) – ThisSuitIsBlackNot

+0

Также, как все настроено в ваших тестах, вы пытаетесь вызвать методы на объект $ error, вместо проверки значений хеш-ключей. Вы даже пытались запустить этот код? – stevieb

ответ

1

У меня не было много времени, но вот несколько тестов несколько по строкам о том, как я их буду писать. Тем не менее, тесты должны жить в собственных файлах, иметь расширение *.t и жить в их собственном каталоге. Они не должны совпадать с кодом, который вы пишете.

use warnings; 
use strict; 

use Test::More; 

use constant { 

    ERROR_AED => { 
     errorCode => 561, 
     message => "this is an error.\n", 
     tt => { template => 'disabled'}, 
     link => 'www.error-fix.com', 
    }, 
}; 

my $error = ERROR_AED; 

is (ref $error, 'HASH', 'ERROR_AED is a hashref'); 

is (defined $error->{errorCode}, 1, 'ERROR_AED contains an errorCode key'); 
is ($error->{errorCode}, 561, 'ERROR_AED errorCode is correct'); 

is (defined $error->{message}, 1, 'ERROR_AED contains key message'); 
like ($error->{message}, qr/this is an error/, 'ERROR_AED msg output is ok'); 

is (defined $error->{tt}, 1, 'ERROR_AED contains key tt'); 
is (ref $error->{tt}, 'HASH', 'ERROR_AED tt is a hashref'); 
is (defined $error->{tt}{template}, 1, 'ERROR_AED tt href contains template key'); 
is ($error->{tt}{template}, 'disabled', 'ERROR_AED tt template is ok'); 

is (defined $error->{link}, 1, 'ERROR_AED has a link key'); 
is ($error->{link}, 'www.error-fix.com', 'ERROR_AED link is ok'); 

done_testing(); 
Смежные вопросы