Что-то совершенно неясно мне о возвращаемом значении subs. Мне нравится тестировать мои модули, sub by sub и проверять, выдают ли они правильное возвращаемое значение или правильное исключение, если это возникнет.Оценка успеха/сбой подпрограммы
Например, скажем, у меня есть следующий код (X :: Аргументом :: 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'));
легко проверить, когда:
- суб возвращает значение,
- условия испытаний должны вызвать исключение,
Однако, когда я просто установить значение поля в текущем объекте, у меня нет причин возвращаться ничего.
В этом случае:
- является простое выполнение кода достаточно, чтобы оценить выход к югу, как «истинный»?
- Должен ли я добавить явный «return 1;» ?
- действительно ли последний возвращает последнюю оценку, в этом случае успешность теста
- в «если»? Что-то еще, о чем я не думал, но которое очевидно для всех?
Почему бы не просто проверить, правильно ли установлен атрибут объекта через attr, или лучше, через геттер? например: 'my $ p = 'blah'; $ Obj-> my_sub ($ р); - $ obj -> {field}, $ p, "my_sub() задает поле attr ok"; ' – stevieb
Действительно. Я понимаю, что я должен был сформулировать свой вопрос по-другому. Фактическая проблема заключается в том, чтобы иметь возможность оценить, правильно ли завершилась подпрограмма, а не только для полевых аффектов, но всякий раз, когда подпрограмма не должна возвращать значение. Яснее ли это? –
Ох. читая вопрос, я понимаю, что нет такой вещи, как общий ответ, не так ли? Мне нужно быть явным для моего возвращаемого значения или выполнять те же действия, которые, как предполагается, должны были быть сделаны с моим объектом. –