PHP單元測(cè)試?yán)?PHPUNIT初探第1/2頁(yè)
一旦你編寫好單元測(cè)試用例,當(dāng)你需要修改你的代碼時(shí),你要做的事情就是重新運(yùn)行你的單元測(cè)試用例并觀察這些單元測(cè)試用例能否通過(guò),如果通過(guò)了的話,證明代碼是沒(méi)問(wèn)題的。
人們往往會(huì)說(shuō):既然單元測(cè)試這么好,為什么那么多人還是不大愿意去寫單元測(cè)試呢?有以下幾種理解上的誤曲:
1、認(rèn)為編寫單元測(cè)試太浪費(fèi)時(shí)間。雖然目前很多IDE工具都為編寫單元測(cè)試建立好了框架,但還是要開(kāi)發(fā)者編寫一些單元測(cè)試的代碼的。就象很多開(kāi)發(fā)中的最佳實(shí)踐一樣,用正確的方法去做正確的事情會(huì)為開(kāi)發(fā)節(jié)省大量的時(shí)間。每當(dāng)新增加新功能時(shí),你可能通過(guò)訪問(wèn)你的網(wǎng)頁(yè)到處去點(diǎn)擊手動(dòng)測(cè)試,而運(yùn)行建立好的單元測(cè)試用例其速度其實(shí)比通過(guò)手工去測(cè)試的速度更快。
2、認(rèn)為既然代碼能運(yùn)行了,不需要再編寫單元測(cè)試。但假設(shè)團(tuán)隊(duì)中有新的成員,如果沒(méi)有良好的單元測(cè)試用例,新成員很有可能隨意地去編碼而不考慮各種后果。如果有編寫良好的單元測(cè)試,在程序運(yùn)行時(shí)進(jìn)行各種測(cè)試,則能最大程度避免bug的產(chǎn)生。
3、認(rèn)為編寫單元測(cè)試代碼枯燥無(wú)味。程序員的天性是解決問(wèn)題,而很多程序員認(rèn)為在緊張的編碼工作時(shí),還要編寫單元測(cè)試代碼,會(huì)很枯燥。但要知道的是,如果能通過(guò)編寫單元測(cè)試在很早的階段就能盡可能發(fā)現(xiàn)代碼中多的錯(cuò)誤的話,那么既節(jié)省時(shí)間減少了出錯(cuò),何樂(lè)而不為?
開(kāi)始動(dòng)手安裝phpunit
本文中將通過(guò)介紹php中的單元測(cè)試?yán)鱬hpunit(http://phpunit.de/),并通過(guò)實(shí)際例子來(lái)講解如何在實(shí)際工作中運(yùn)用phpunit。首先安裝phpunit的方法可以通過(guò)php下的pear去安裝:
pear channel-discover pear.phpunit.de
pear channel-discover components.ez.no
pear channel-discover pear.symfony-project.com
pear install phpunit/PHPUnit如果你想通過(guò)手動(dòng)方式去安裝,可以參考phpunit的手冊(cè)去安裝(http://www.phpunit.de/manual/3.0/en/installation.html)。
編寫第一個(gè)單元測(cè)試用例
下面我們開(kāi)始編寫第一個(gè)單元測(cè)試用例。在編寫測(cè)試用例時(shí),要遵守如下的phpunit的規(guī)則:
1 一般地,在測(cè)試用例中,可以擴(kuò)展PHPUnit_Framework_TestCase類,這樣就可以使用象setUp(),tearDown()等方法了。
2 測(cè)試用例的名字最好是使用約定俗成的格式,即在被測(cè)試類的后面加上”Test”,比如要測(cè)試的類為RemoteConnect,則測(cè)試用例的命名為RemoteConnectTest。
3 在一個(gè)測(cè)試用例中的所有的測(cè)試方法,在命名時(shí)都應(yīng)該以test+測(cè)試方法名去命名,如testDoesLikeWaffles(),要注意的是該方法必須是聲明為public類型的。當(dāng)然可以在你的測(cè)試用例中包含private的方法,但它們不能被phpunit所調(diào)用。
4 測(cè)試方法中是不能接收參數(shù)的。
下面首先舉個(gè)簡(jiǎn)單的例子,代碼如下:
<?php
class RemoteConnect
{
public function connectToServer($serverName=null)
{
if($serverName==null){
throw new Exception(“That's not a server name!”);
}
$fp = fsockopen($serverName,80);
return ($fp) ? true : false;
}
public function returnSampleObject()
{
return $this;
}
}
?>上面的代碼其實(shí)是實(shí)現(xiàn)連接到一個(gè)指定的服務(wù)器的功能,那么我們可以編寫測(cè)試代碼如下:
<?php
require_once('RemoteConnect.php');
class RemoteConnectTest extends PHPUnit_Framework_TestCase
{
public function setUp(){ }
public function tearDown(){ }
public function testConnectionIsValid()
{
// test to ensure that the object from an fsockopen is valid
$connObj = new RemoteConnect();
$serverName = 'www.google.com';
$this->assertTrue($connObj->connectToServer($serverName) !== false);
}
}
?> 在上面的代碼中,由于繼承了PHPUnit_Framework_TestCase類,因此在setUp和tearDown方法中,不需要編寫任何代碼。SetUp方法是在每個(gè)測(cè)試用例運(yùn)行前進(jìn)行一些初始化的工作,而tearDown則在每個(gè)測(cè)試用例運(yùn)行后進(jìn)行一些比如資源的釋放等工作。在測(cè)試方法中,通過(guò)使用phpunit的斷言assertTrue去判斷所返回的布爾值是否為真,這里是通過(guò)調(diào)用RemoteConnect.php中的connectToServe方法去判斷能否連接上服務(wù)器。
- Windows下安裝PHP單元測(cè)試環(huán)境PHPUnit圖文教程
- PHP單元測(cè)試?yán)?PHPUNIT深入用法(三)
- PHP單元測(cè)試?yán)?PHPUNIT深入用法(二)
- PHP單元測(cè)試PHPUnit簡(jiǎn)單用法示例
- PHP單元測(cè)試框架PHPUnit用法詳解
- 使用PHPUnit進(jìn)行單元測(cè)試并生成代碼覆蓋率報(bào)告的方法
- php單元測(cè)試phpunit入門實(shí)例教程
- PHP使用phpunit進(jìn)行單元測(cè)試示例
- PHPUnit + Laravel單元測(cè)試常用技能
- Windows下wamp php單元測(cè)試工具PHPUnit安裝及生成日志文件配置方法
- laravel單元測(cè)試之phpUnit中old()函數(shù)報(bào)錯(cuò)解決
- PHPUnit 單元測(cè)試安裝與使用入門教程
相關(guān)文章
php cookie的操作實(shí)現(xiàn)代碼(登錄)
cookie 常用于識(shí)別用戶。cookie 是服務(wù)器留在用戶計(jì)算機(jī)中的小文件。每當(dāng)相同的計(jì)算機(jī)通過(guò)瀏覽器請(qǐng)求頁(yè)面時(shí),它同時(shí)會(huì)發(fā)送 cookie。通過(guò) PHP,您能夠創(chuàng)建并取回 cookie 的值。2010-12-12
利用discuz自帶通行證整合dedecms的方法以及文件下載
利用discuz自帶通行證整合dedecms的方法以及文件下載...2007-03-03
在mac?OS上進(jìn)行多個(gè)PHP版本之間切換的實(shí)現(xiàn)方法
不同項(xiàng)目使用php版本可能不同,需要安裝不同版本php,本文給大家介紹了在macOS上進(jìn)行多個(gè)?PHP?版本之間切換的實(shí)現(xiàn)方法,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2023-10-10

