Мне что-то совершенно неясно о возвращаемом значении сабвуфера. Мне нравится тестировать мои модули, подпрограммы, и проверять, выдают ли они правильное возвращаемое значение или правильное исключение, если возникает случай.
Например, предположим, что у меня есть следующий код (X::Argument::BadFormat — это обработчик исключений, производный от Exception::Class):
package My::Module;
use strict;
use warnings;
sub new{#does things unrelated to the current question}
sub my_sub {
my ($self,$possible_value) = @_;
if ($possible_value =~ q{\w}) { #Affect value to current object
$self->{field} = $possible_value;
}else{ #throw an exception
X::Argument::BadFormat->throw(
arg => 'possible_value',
expected_format => 'something that looks like a word',
received_value => $possible_value,
);
}
}
В тестовом файле я буду запускать такие тесты, как:
my $object = My::Module->new();
throws_ok(sub {$object->my_sub('*')}, 'X::Argument::BadFormat', 'Faulty value will raise an exception');
ok($object->my_sub('turlututu'));
Легко проверить, когда:
- sub возвращает значение,
- условия теста должны вызывать исключение,
Однако, когда я просто устанавливаю значение поля в текущем объекте, у меня нет причин что-либо возвращать.
В таком случае:
- достаточно ли простого выполнения кода, чтобы оценить дополнительный вывод как «истинный»?
- Должен ли я добавить явное «возврат 1;» ?
- действительно ли sub возвращает последнюю оценку, в этом случае успех
- тест в "если"? Что-то еще, о чем я не подумал, но что очевидно для всех?
my $p='blah'; $obj->my_sub($p); is $obj->{field}, $p, "my_sub() set the field attr ok";
- person stevieb   schedule 15.12.2016$possible_value =~ /\A\w+\z/
, чтобы шаблон был регулярным выражением, а не строкой в одинарных кавычках, и он проверял, что вся строка состоит из словесных символов. То, что у вас было, будет проверять только то, что оно содержит хотя бы один символ слова. - person Borodin   schedule 15.12.2016