成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

初探PHP單元測試利器:PHPUnit

開發 后端
在本文中,初步介紹了PHP單元測試中的一些基礎知識和人們常見的誤區,并簡單舉例說明了如何在PHP中使用PHPUnit和一些基本的用法.

你是否在程序開發的過程中遇到以下的情況:當你花了很長的時間開發一個PHP應用后,你認為應該是大功告成了,可惜在調試的時候,老是不斷的發現bug,而且最可怕的是,這些bug是重復出現的,你可能發現這些bug之間會有關聯,但卻老是找不到問題的所在。

當你遇到以上這些令你沮喪的情況時,你一定會想能有什么更好的辦法去解決呢?辦法當然是有的!這就是使用單元測試。單元測試不但可以在一定程度上解決上述頭疼的問題,而且能讓代碼變的容易維護,還可以能讓你更多地對代碼進行重構。

一旦你編寫好單元測試用例,當你需要修改你的代碼時,你要做的事情就是重新運行你的單元測試用例并觀察這些單元測試用例能否通過,如果通過了的話,證明代碼是沒問題的。

人們往往會說:既然單元測試這么好,為什么那么多人還是不大愿意去寫單元測試呢?有以下幾種理解上的誤曲:

1、認為編寫單元測試太浪費時間。雖然目前很多IDE工具都為編寫單元測試建立好了框架,但還是要開發者編寫一些單元測試的代碼的。就象很多開發中的***實踐一樣,用正確的方法去做正確的事情會為開發節省大量的時間。每當新增加新功能時,你可能通過訪問你的網頁到處去點擊手動測試,而運行建立好的單元測試用例其速度其實比通過手工去測試的速度更快。

2、認為既然代碼能運行了,不需要再編寫單元測試。但假設團隊中有新的成員,如果沒有良好的單元測試用例,新成員很有可能隨意地去編碼而不考慮各種后果。如果有編寫良好的單元測試,在程序運行時進行各種測試,則能***程度避免bug的產生。

3、認為編寫單元測試代碼枯燥無味。程序員的天性是解決問題,而很多程序員認為在緊張的編碼工作時,還要編寫單元測試代碼,會很枯燥。但要知道的是,如果能通過編寫單元測試在很早的階段就能盡可能發現代碼中多的錯誤的話,那么既節省時間減少了出錯,何樂而不為?

開始動手安裝PHPUnit

本文中將通過介紹PHP中的單元測試利器PHPUnit(http://phpunit.de/),并通過實際例子來講解如何在實際工作中運用PHPUnit。首先安裝PHPUnit的方法可以通過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

如果你想通過手動方式去安裝,可以參考PHPUnit的手冊去安裝(http://www.phpunit.de/manual/3.0/en/installation.html)。

編寫***個單元測試用例

下面我們開始編寫***個單元測試用例。在編寫測試用例時,要遵守如下的PHPUnit的規則:

1 一般地,在測試用例中,可以擴展PHPUnit_Framework_TestCase類,這樣就可以使用象setUp(),tearDown()等方法了。

2 測試用例的名字***是使用約定俗成的格式,即在被測試類的后面加上”Test”,比如要測試的類為RemoteConnect,則測試用例的命名為RemoteConnectTest。

3 在一個測試用例中的所有的測試方法,在命名時都應該以test+測試方法名去命名,如testDoesLikeWaffles(),要注意的是該方法必須是聲明為public類型的。當然可以在你的測試用例中包含private的方法,但它們不能被phpunit所調用。

4 測試方法中是不能接收參數的。

下面首先舉個簡單的例子,代碼如下:

  1. class RemoteConnect  
  2. {  
  3.   public function connectToServer($serverName=null)  
  4.   {  
  5.     if($serverName==null){  
  6.       throw new Exception(“That's not a server name!”);  
  7.     }  
  8.     $fp = fsockopen($serverName,80);  
  9.     return ($fp) ? true : false;  
  10.   }  
  11.   public function returnSampleObject()  
  12.   {  
  13.     return $this;  
  14.   }  
  15. }  
  16. ?> 

上面的代碼其實是實現連接到一個指定的服務器的功能,那么我們可以編寫測試代碼如下:

  1. require_once('RemoteConnect.php');  
  2. class RemoteConnectTest extends PHPUnit_Framework_TestCase  
  3. {  
  4.   public function setUp(){ }  
  5.   public function tearDown(){ }  
  6.   public function testConnectionIsValid()  
  7.   {  
  8.     // test to ensure that the object from an fsockopen is valid  
  9.     $connObj = new RemoteConnect();  
  10.     $serverName = 'www.google.com';  
  11.     $this->assertTrue($connObj->connectToServer($serverName) !== false);  
  12.   }  
  13. }  
  14. ?> 

在上面的代碼中,由于繼承了PHPUnit_Framework_TestCase類,因此在setUp和tearDown方法中,不需要編寫任何代碼。SetUp方法是在每個測試用例運行前進行一些初始化的工作,而tearDown則在每個測試用例運行后進行一些比如資源的釋放等工作。在測試方法中,通過使用PHPUnit的斷言assertTrue去判斷所返回的布爾值是否為真,這里是通過調用RemoteConnect.php中的connectToServe方法去判斷能否連接上服務器。

接下來我們運行這個單元測試,在命令行下輸入代碼:

phpunit /path/to/tests/RemoteConnectTest.php即可,可以看到測試順利通過的話,會輸出以下結果:

PHPUnit 3.4 by Sebastian Bergmann
.
Time: 1 second
Tests: 1, Assertions: 1, Failures 0

可以看到,上面是通過了測試。默認情況下,PHPUnit是會運行測試用例中的所有測試方法的。下面再介紹下PHPUnit中相關的幾個斷言:

AssertTrue/AssertFalse 斷言是否為真值還是假
AssertEquals 判斷輸出是否和預期的相等
AssertGreaterThan 斷言結果是否大于某個值,同樣的也有LessThan(小于),GreaterThanOrEqual(大于等于),
LessThanOrEqual(小于等于).
AssertContains 判斷輸入是否包含指定的值
AssertType 判斷是否屬于指定類型
AssertNull 判斷是否為空值
AssertFileExists 判斷文件是否存在
AssertRegExp 根據正則表達式判斷

舉個例子來說明下比如AssertType的使用,依然以上面的例子來說,可以用AssertType去判斷returnSampleObject返回的對象實例是否為remoteConnect,代碼如下:

  1. function testIsRightObject() {  
  2.   $connObj = new RemoteConnect();  
  3.   $returnedObject = $connObj->returnSampleObject();  
  4.   $this->assertType('remoteConnect'$returnedObject);  
  5. }  
  6. ?> 

目前PHP框架對單元測試的支持

目前很多優秀的PHP框架(如Zend Framework,Symfony等),都提供了對單元測試很好的支持。以Zend Framework為例,說明下其中是如何運行單元測試的。

  1. class CommentControllerTest extends Zend_Test_PHPUnit_ControllerTestCase  
  2. {  
  3.   public function setUp()  
  4.   {  
  5.     parent::setUp();  
  6.   }  
  7.   public function tearDown()  
  8.   {  
  9.     parent::tearDown();  
  10.   }  
  11.   public function appBootstrap()  
  12.   {  
  13.     $this->frontController->registerPlugin(new Initializer('test'));  
  14.   }  
  15.   public function testGoHome()  
  16.   {  
  17.     $this->dispatch('/home');  
  18.     $this->assertController('home');  
  19.   }  
  20. }  
  21. ?> 

以上代碼其實是對Zend本身的框架進行了一個單元測試而已,可以看到,在Zend中,是通過繼承Zend_Test_PHPUnit_ControllerTestCase去對Zend的controller去進行單元測試的,可以看到,在zend中的單元測試跟PHPUnit中的差不多,但增加了另外一些新的斷言,比如上面的assertController,具體的可以參考Zend的參考手冊。

PHPUnit是一個輕量級的PHP測試框架。它是在PHP5下面對JUnit3系列版本的完整移植,是xUnit測試框架家族的一員(它們都基于模式先鋒Kent Beck的設計)。   
單元測試是幾個現代敏捷開發方法的基礎,使得PHPUnit成為許多大型PHP項目的關鍵工具。這個工具也可以被Xdebug擴展用來生成代碼覆蓋率報告 ,并且可以與phing集成來自動測試,最后它還可以和Selenium整合來完成大型的自動化集成測試。

原文鏈接:http://tech.it168.com/a2011/0214/1156/000001156996_all.shtml

【編輯推薦】

  1. 商業PHP開發工具PhpStorm 2.0發布 新功能全解析
  2. PHP開發者工資翻倍需做到的5件事
  3. PHP企業級應用之常見緩存技術深入解讀
  4. PHP與Java在Web開發方面的比較
  5. Web開發者必備:21個超實用PHP代碼
責任編輯:陳貽新 來源: it168
相關推薦

2011-02-16 09:45:13

PHPPHPUnit

2011-02-21 09:54:14

PHPPHPUnit

2017-01-14 23:42:49

單元測試框架軟件測試

2011-11-18 15:18:41

Junit單元測試Java

2017-04-07 13:45:02

PHP單元測試數據庫測試

2024-04-26 11:14:34

C#單元測試框架

2015-12-02 10:52:11

PHPUnitWindows配置

2017-01-16 12:12:29

單元測試JUnit

2017-01-14 23:26:17

單元測試JUnit測試

2020-08-18 08:10:02

單元測試Java

2017-03-23 16:02:10

Mock技術單元測試

2021-05-05 11:38:40

TestNGPowerMock單元測試

2011-07-04 18:16:42

單元測試

2020-05-07 17:30:49

開發iOS技術

2023-07-26 08:58:45

Golang單元測試

2011-05-16 16:52:09

單元測試徹底測試

2017-02-23 15:59:53

測試MockSetup

2011-04-18 13:20:40

單元測試軟件測試

2012-05-17 09:09:05

Titanium單元測試

2009-09-25 10:33:25

Hibernate單元
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99视频免费看 | 中文字幕免费 | 国产亚洲一区二区在线观看 | 色视频网站 | 国产亚洲欧美日韩精品一区二区三区 | 美女二区 | 中文区中文字幕免费看 | 在线免费激情视频 | 午夜成人免费视频 | 精品国产91乱码一区二区三区 | 伊人精品久久久久77777 | 69av网| 日韩一级电影免费观看 | 黑人巨大精品欧美一区二区一视频 | 久久综合伊人 | 久久免费精品 | 一级a爱片性色毛片免费 | 日韩免费高清视频 | 亚洲精品乱码久久久久久久久 | 午夜黄色影院 | 密桃av| 国产在线色| 91新视频 | 欧美在线天堂 | 欧美激情国产日韩精品一区18 | 亚洲一区二区三区四区五区中文 | 欧美一区二区三区视频 | 欧美一区二区三区视频在线播放 | 国产三区视频在线观看 | 国产免费av在线 | 69av网| 一级黄片一级毛片 | 亚洲欧洲在线观看视频 | 亚洲在线观看视频 | 午夜码电影 | 日本在线一二 | 成人妇女免费播放久久久 | 久久久99国产精品免费 | 亚洲综合在线一区二区 | 色婷婷久久久亚洲一区二区三区 | 免费h在线 |