這是我第一個問題Stack Overflow。如果我違反了一些規則,請事先道歉。用Test :: More測試Perl模塊(中級Perl,第14章)
我一直在閱讀中級Perl第2版的第14章,其中討論了測試Perl模塊和使用Test :: More中的特性。我指的是在本書的「添加我們的第一次測試」一節中直接發佈的代碼。
對於一些背景,在本章中,樣本Animal
類是在具有相同名稱的模塊中創建的。這個類有一個簡單的speak
方法,該方法是這樣的:
sub speak {
my $class = shift;
print "a $class goes ", $class->sound, "!\n";
}
的sound
方法是一個簡單的字符串返回一個特定的動物,因此,例如,一匹馬的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"
);
}
測試失敗。我跑了所有的生成命令,但運行時「搭建測試」,我得到這個故障的動物試驗:
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。
一個很好的問題,很好的形成和包含適當的細節。歡迎來到SO –