Test::Simple - 撰寫測試的基本實用程式。
use Test::Simple tests => 1;
ok( $foo eq $bar, 'foo is bar' );
** 如果你不熟悉測試,請先閱讀 Test::Tutorial! **
這是一個極其簡單、極其基本的模組,適用於撰寫適合 CPAN 模組和其他用途的測試。如果你想要進行更複雜的測試,請使用 Test::More 模組(此模組的替代品)。
Perl 測試的基本單位是 ok。對於你想要測試的每一件事,你的程式都會印出「ok」或「not ok」來表示通過或失敗。你可以使用 ok()
函數(見下文)來執行此操作。
唯一的其他限制是你必須預先宣告你計畫執行多少測試。這是為了防止在測試期間發生嚴重錯誤,導致你的測試程式中止或跳過測試等情況。你可以這樣做
use Test::Simple tests => 23;
你必須有一個計畫。
ok( $foo eq $bar, $name );
ok( $foo eq $bar );
ok()
會給定一個表達式(在本例中為 $foo eq $bar
)。如果為真,則測試通過。如果為假,則測試未通過。大致就是這樣。
ok()
會印出「ok」或「not ok」,以及測試編號(它會幫你追蹤)。
# This produces "ok 1 - Hell not yet frozen over" (or not ok)
ok( get_temperature($hell) > 0, 'Hell not yet frozen over' );
如果你提供一個 $name,它會和「ok/not ok」一起印出,讓你在測試失敗時更容易找到你的測試(只要搜尋名稱即可)。它也讓下一個使用者更容易了解你的測試用途。強烈建議你使用測試名稱。
所有測試都在純量內容中執行。因此,這
ok( @stuff, 'I have some stuff' );
會執行你的意思(如果東西是空的,就會失敗)
Test::Simple 會先印出執行測試的數量,格式為「1..M」(因此「1..5」表示你將執行 5 個測試)。這種奇怪的格式讓 Test::Harness 知道你計畫執行多少個測試,以防萬一發生嚴重錯誤。
如果你的所有測試都通過,Test::Simple 會以零退出(這是正常的)。如果有任何失敗,它會退出並顯示失敗的數量。如果你執行的測試少於(或多於)你計畫的數量,缺少(或額外的)測試會被視為失敗。如果從未執行任何測試,Test::Simple 會發出警告並以 255 退出。如果測試已死,即使已成功完成所有測試,它仍會被視為失敗並以 255 退出。
因此,退出代碼為...
0 all tests successful
255 test died or all passed but wrong # of tests run
any other number how many failed (including missing or extras)
如果你失敗超過 254 個測試,它會報告為 254。
這個模組絕不是要成為一個完整的測試系統。它只是讓你入門。一旦你開始執行,建議你查看 Test::More。
以下是虛構的 Film 模組的簡單 .t 檔案範例。
use Test::Simple tests => 5;
use Film; # What you're testing.
my $btaste = Film->new({ Title => 'Bad Taste',
Director => 'Peter Jackson',
Rating => 'R',
NumExplodingSheep => 1
});
ok( defined($btaste) && ref $btaste eq 'Film', 'new() works' );
ok( $btaste->Title eq 'Bad Taste', 'Title() get' );
ok( $btaste->Director eq 'Peter Jackson', 'Director() get' );
ok( $btaste->Rating eq 'R', 'Rating() get' );
ok( $btaste->NumExplodingSheep == 1, 'NumExplodingSheep() get' );
它會產生如下輸出
1..5
ok 1 - new() works
ok 2 - Title() get
ok 3 - Director() get
not ok 4 - Rating() get
# Failed test 'Rating() get'
# in t/film.t at line 14.
ok 5 - NumExplodingSheep() get
# Looks like you failed 1 tests of 5
表示 Film::Rating() 方法已中斷。
Test::Simple 只能在其退出代碼中報告最多 254 個失敗。如果這是一個問題,你可能有一個巨大的測試腳本。將它分割成多個檔案。(否則,請責怪 Unix 人員使用無符號短整數作為退出狀態)。
由於 VMS 的退出代碼與宇宙中的其他部分非常不同,而且 perl 對它們進行了可怕的破壞,這會妨礙我,因此它在 VMS 上的工作方式如下。
0 SS$_NORMAL all tests successful
4 SS$_ABORT something went wrong
不幸的是,我無法進一步區分。
Test::Simple 已明確測試回溯到 perl 5.6.0。
Test::Simple 在 perl 5.8.1 及更新版本中具備執行緒安全性。
某天晚上,在與 Tony Bowden 在他廚房裡討論我在撰寫一些非常複雜的功能時遇到的問題時,構思了這個模組。他觀察到,主要的問題不在於處理這些邊界案例,而是人們根本不喜歡撰寫測試。需要的只是一個簡單的模組,可以消除測試中的所有繁瑣工作,而且真的非常容易學習。Paul Johnson 同時也有這個想法(很遺憾,他不在 Tony 的廚房裡)。這就是它。
更多測試功能!一旦您不再需要 Test::Simple,請查看 Test::More。Test::Simple 與 Test::More 100% 向前相容(也就是說,您可以在程式中使用 Test::More 取代 Test::Simple,一切仍然會正常運作)。
在 Test::More 的另請參閱中尋找更多測試模組。
構想:Tony Bowden 和 Paul Johnson,程式碼:Michael G Schwern <schwern@pobox.com>,服裝:Calvin Klein。
版權所有 2001-2008 Michael G Schwern <schwern@pobox.com>。
此程式為自由軟體;您可以在與 Perl 相同的條款下重新散布或修改它。
請參閱 http://www.perl.com/perl/misc/Artistic.html