Это мой первый вопрос для. Извините заранее, если я нарушу некоторые правила.
Я читал главу 14 Intermediate Perl, 2-е изд., в котором обсуждается тестирование модулей Perl и использование функций из Test:: More. Я имею в виду код, опубликованный непосредственно в этой книге в разделе "Добавление наших первых тестов".
Для некоторого фона в этой главе образец Animal
создается в модуле с тем же именем. Этот класс имеет простой метод speak
, который выглядит следующим образом:
sub speak {
my $class = shift;
print "a $class goes ", $class->sound, "!\n";
}
Метод sound
- это простая строка, возвращаемая для определенного Animal, поэтому, например, метод Horse sound
будет просто sub sound { "neigh" }
, а метод speak
должен выводить следующее:
A Horse goes neigh!
Проблема, с которой я сталкиваюсь, заключается в следующем: в тестовом коде, который я создал в. /Animal/t/Animal.t, мне поручено использовать только изолированные блоки и Test::More::is
, чтобы проверить, что speak
работает. Код выглядит так в тестовом файле:
[test code snip]
{
package Foofle;
use parent qw(Animal);
sub sound { 'foof' }
is( Foofle->speak,
"A Foofle goes foof!\n",
"An Animal subclass does the right thing"
);
}
Тест не проходит. Я запускал все команды Build, но при запуске "Build test" я получаю этот сбой для теста Animal:
Undefined subroutine &Foofle::is called at t/Animal.t line 28.
Когда я пытаюсь явно использовать Test::More::is
вместо простого is
, тест по-прежнему не работает со следующим сообщением:
# Failed test 'An Animal subclass does the right thing'
# at t/Animal.t line 28.
# got: '1'
# expected: 'A Foofle goes foof!
# '
Мои методы отображаются точно так, как я объяснил. Я думаю, что первая ошибка - проблема с областью из-за голых блоков, но не на 100%. Вторая ошибка, о которой я не знаю, потому что, если бы я должен был создать класс Foofle
как дочерний элемент Animal
и называть его speak
, я бы не получил 1 ответ, а скорее ожидаемый результат.
Кто-нибудь сможет помочь мне в том, что я могу сделать неправильно? Для возможных версий программного обеспечения я использую perl v5.16, Test:: More v0.98 и Module:: Starter v1.58.