PHPUnit袖珍指南之PHPUnit的目的
到此為止,我們只有兩個(gè)對(duì)Array和內(nèi)建函數(shù)sizeof()的測(cè)試。當(dāng)我們開始測(cè)試大量的array_*()函數(shù)時(shí),每個(gè)都需要一個(gè)測(cè)試。我們可以每個(gè)都從頭寫起。但是,更好的方法是一次性寫好一個(gè)測(cè)試基礎(chǔ)構(gòu)架,以后就只用寫每個(gè)測(cè)試不同的部分。PHPUnit就是這樣一個(gè)基礎(chǔ)構(gòu)架。
例5展示了如何用PHPUnit重寫例4中的兩個(gè)測(cè)試。
例5. 用PHPUnit測(cè)試 Array和sizeof().
<?php require_once 'PHPUnit2/Framework/TestCase.php';
class ArrayTest extends PHPUnit2_Framework_TestCase {public function testNewArrayIsEmpty( ) { // 創(chuàng)建數(shù)組fixture?!?fixture = Array( ); // 斷言數(shù)組fixture的大小是0。 $this->assertEquals(0, sizeof($fixture)); }public function testArrayContainsAnElement( ) { // 創(chuàng)建數(shù)組fixture。 $fixture = Array( );
// 為數(shù)組fixture增加一個(gè)成員?!?fixture[] = 'Element'; //斷言數(shù)組fixture的大小是1?!?this->assertEquals(1, sizeof($fixture));} }?>
例5告訴我們用PHPUnit來寫測(cè)試的基本步驟是:
1.類Class的測(cè)試類是ClassTest。
2.ClassTest一般繼承PHPUnit2_ Framework_TestCase。
3.測(cè)試是公有方法,沒有參數(shù),名字是test*。
4.在測(cè)試方法中,斷言函數(shù),如assertEquals()(見表6)用于斷言實(shí)際值是否匹配期望值。
一個(gè)如PHPUnit的框架需要解決一系列問題,有些看起來互相沖突。測(cè)試必須同時(shí)滿足以下條件:
易學(xué)
測(cè)試必須容易學(xué),否則,開發(fā)人員不會(huì)去學(xué)
易開發(fā)
測(cè)試必須容易開發(fā),否則,開發(fā)人員不會(huì)去開發(fā)
易讀
測(cè)試代碼必須沒有外部關(guān)系,這樣測(cè)試本身不會(huì)在雜亂無章中迷失。
容易執(zhí)行
測(cè)試應(yīng)該很容易執(zhí)行,執(zhí)行的結(jié)果以一種清楚和明確的格式表達(dá)出來。
快速執(zhí)行
測(cè)試應(yīng)該執(zhí)行的很快,這樣每天才能執(zhí)行上千次。
代碼隔離
測(cè)試之間不能互相影響,測(cè)試順序的改變不應(yīng)該影響結(jié)果。
可組合的
我們應(yīng)該可以以任何組合來運(yùn)行測(cè)試,這是代碼隔離的一個(gè)必然結(jié)果。
這些約束條件有兩個(gè)主要的沖突:
易學(xué)vs易開發(fā)
測(cè)試通常不需要應(yīng)用到編程全部的靈活性。很多測(cè)試工具提供了它們自己的測(cè)試腳本語言,這些語言只有書寫測(cè)試所需特性的最小集,因?yàn)闆]有噪聲來干擾你的測(cè)試內(nèi)容,寫出來的測(cè)試易讀易寫。但是學(xué)一種新的編織郵件和一套工具還是不方便的,容易混淆視聽。
代碼隔離vs快速執(zhí)行
如果你想要一個(gè)測(cè)試的結(jié)果不影響另一個(gè),每個(gè)測(cè)試在開始運(yùn)行的階段,都需要?jiǎng)?chuàng)建測(cè)試的全專題,返回后又要恢復(fù)運(yùn)行之前的狀態(tài)??墒牵O(shè)置狀態(tài)需要的時(shí)間很長(如,連接到數(shù)據(jù)庫,用真實(shí)數(shù)據(jù)初始化到一個(gè)已知狀態(tài))
PHPUnit解決這個(gè)問題的辦法是采用PHP作為測(cè)試語言。有時(shí),全功能的PHP對(duì)于書寫短小的,直接的測(cè)試是過于強(qiáng)大了,不過,我們利用的程序員已經(jīng)有使用PHP的全部經(jīng)驗(yàn)。因?yàn)槲覀冃枰f服勉強(qiáng)的測(cè)試人員,降低書寫這些初始測(cè)試的門檻是及其重要的。
