目錄

名稱

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
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::More

更多測試功能!一旦您不再需要 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。

維護人員

Chad Granum <exodist@cpan.org>

版權

版權所有 2001-2008 Michael G Schwern <schwern@pobox.com>。

此程式為自由軟體;您可以在與 Perl 相同的條款下重新散布或修改它。

請參閱 http://www.perl.com/perl/misc/Artistic.html