監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉
鷹潭網(wǎng)站建設(shè)公司

當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普各地 > 江西OA系統(tǒng) > 鷹潭OA > 鷹潭網(wǎng)站建設(shè)公司

PHPUnit

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

鷹潭網(wǎng)站建設(shè)www.diyphp.net

你能否在順序開(kāi)發(fā)的過(guò)程中遇到以下的狀況:當(dāng)你花了很長(zhǎng)的工夫開(kāi)發(fā)一個(gè)PHP應(yīng)用后,你以為應(yīng)該是功德圓滿了,惋惜在調(diào)試的時(shí)分,老是不斷的發(fā)現(xiàn)bug,而且最可怕的是,這些bug是重復(fù)呈現(xiàn)的,你能夠發(fā)現(xiàn)這些bug之間會(huì)有相關(guān),但卻老是找不到問(wèn)題的地點(diǎn)。

  當(dāng)你遇到以上這些令你懊喪的狀況時(shí),你必定會(huì)想能有什么更好的辦法去處理呢?辦法當(dāng)然是有的!這就是運(yùn)用單元測(cè)驗(yàn)。單元測(cè)驗(yàn)不光可以在必定程度上處理上述頭疼的問(wèn)題,而且能讓代碼變的簡(jiǎn)略保護(hù),還可以能讓你更多地對(duì)代碼進(jìn)行重構(gòu)。

  一旦你編寫(xiě)好單元測(cè)驗(yàn)用例,當(dāng)你需求修正你的代碼時(shí),你要做的任務(wù)就是從頭運(yùn)轉(zhuǎn)你的單元測(cè)驗(yàn)用例并調(diào)查這些單元測(cè)驗(yàn)用例能否經(jīng)過(guò),若是經(jīng)過(guò)了的話,證明代碼是沒(méi)問(wèn)題的。

  大家往往會(huì)說(shuō):已然單元測(cè)驗(yàn)這么好,為什么那么多人仍是不大情愿去寫(xiě)單元測(cè)驗(yàn)?zāi)?有以下幾種了解上的誤曲:

  1、以為編寫(xiě)單元測(cè)驗(yàn)太浪費(fèi)工夫。固然當(dāng)前許多IDE東西都為編寫(xiě)單元測(cè)驗(yàn)樹(shù)立好了結(jié)構(gòu),但仍是要開(kāi)發(fā)者編寫(xiě)一些單元測(cè)驗(yàn)的代碼的。就象許多開(kāi)發(fā)中的最佳理論相同,用正確的辦法去做正確的任務(wù)會(huì)為開(kāi)發(fā)節(jié)約許多的工夫。每逢新添加新功用時(shí),你能夠經(jīng)過(guò)拜訪你的網(wǎng)頁(yè)處處去點(diǎn)擊手動(dòng)測(cè)驗(yàn),而運(yùn)轉(zhuǎn)樹(shù)立好的單元測(cè)驗(yàn)用例其速度其實(shí)比經(jīng)過(guò)手藝去測(cè)驗(yàn)的速度更快。

  2、以為已然代碼能運(yùn)轉(zhuǎn)了,不需求再編寫(xiě)單元測(cè)驗(yàn)。但假定團(tuán)隊(duì)中有新的成員,若是沒(méi)有杰出的單元測(cè)驗(yàn)用例,新成員很有能夠隨意地去編碼而不思索各種成果。若是有編寫(xiě)杰出的單元測(cè)驗(yàn),在順序運(yùn)轉(zhuǎn)時(shí)進(jìn)行各種測(cè)驗(yàn),則能最大程度防止bug的發(fā)生。

  3、以為編寫(xiě)單元測(cè)驗(yàn)代碼單調(diào)無(wú)味。順序員的天分是處理問(wèn)題,而許多順序員以為在嚴(yán)重的編碼任務(wù)時(shí),還要編寫(xiě)單元測(cè)驗(yàn)代碼,會(huì)很單調(diào)。但要曉得的是,若是能經(jīng)過(guò)編寫(xiě)單元測(cè)驗(yàn)在很早的段落就能盡能夠發(fā)現(xiàn)代碼中多的過(guò)錯(cuò)的話,那么既節(jié)約工夫減少了犯錯(cuò),何樂(lè)而不為?

  開(kāi)端著手裝置PHPUnit

  本文中將經(jīng)過(guò)引見(jiàn)PHP中的單元測(cè)驗(yàn)利器PHPUnit(http://phpunit.de/),并經(jīng)過(guò)實(shí)踐比方來(lái)解說(shuō)如安在實(shí)踐任務(wù)中運(yùn)用PHPUnit。首要裝置PHPUnit的辦法可以經(jīng)過(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

 

  若是你想經(jīng)過(guò)手動(dòng)辦法去裝置,可以參閱PHPUnit的手冊(cè)去裝置(http://www.phpunit.de/manual/3.0/en/installation.html)。

  編寫(xiě)第一個(gè)單元測(cè)驗(yàn)用例

  下面咱們開(kāi)端編寫(xiě)第一個(gè)單元測(cè)驗(yàn)用例。在編寫(xiě)測(cè)驗(yàn)用例時(shí),要恪守如下的PHPUnit的規(guī)矩:

  1 普通地,在測(cè)驗(yàn)用例中,可以擴(kuò)大PHPUnit_Framework_TestCase類(lèi),這樣就可以運(yùn)用象setUp(),tearDown()等辦法了。

  2 測(cè)驗(yàn)用例的姓名最棒是運(yùn)用約定俗成的格局,即在被測(cè)驗(yàn)類(lèi)的后邊加上”Test”,比方要測(cè)驗(yàn)的類(lèi)為RemoteConnect,則測(cè)驗(yàn)用例的命名為RemoteConnectTest。

  3 在一個(gè)測(cè)驗(yàn)用例中的一切的測(cè)驗(yàn)辦法,在命名時(shí)都應(yīng)該以test+測(cè)驗(yàn)辦法名去命名,如testDoesLikeWaffles(),要注意的是該辦法必須是聲明為public類(lèi)型的。當(dāng)然可以在你的測(cè)驗(yàn)用例中包括private的辦法,但它們不能被phpunit所調(diào)用。

  4 測(cè)驗(yàn)辦法中是不能接納參數(shù)的。

  下面首要舉個(gè)簡(jiǎn)略的比方,代碼如下:

 

  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í)是完結(jié)連接到一個(gè)指定的服務(wù)器的功用,那么咱們可以編寫(xiě)測(cè)驗(yàn)代碼如下:

 

  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類(lèi),因此在setUp和tearDown辦法中,不需求編寫(xiě)任何代碼。SetUp辦法是在每個(gè)測(cè)驗(yàn)用例運(yùn)轉(zhuǎn)前進(jìn)行一些初始化的任務(wù),而tearDown則在每個(gè)測(cè)驗(yàn)用例運(yùn)轉(zhuǎn)后進(jìn)行一些比方資源的開(kāi)釋等任務(wù)。在測(cè)驗(yàn)辦法中,經(jīng)過(guò)運(yùn)用PHPUnit的斷語(yǔ)assertTrue去判別所回來(lái)的布爾值能否為真,這里是經(jīng)過(guò)調(diào)用RemoteConnect.php中的connectToServe辦法去判別能否連接上服務(wù)器。

  接下來(lái)咱們運(yùn)轉(zhuǎn)這個(gè)單元測(cè)驗(yàn),在命令行下輸入代碼:

  phpunit /path/to/tests/RemoteConnectTest.php即可,可以看到測(cè)驗(yàn)順暢經(jīng)過(guò)的話,會(huì)輸出以下成果:

 

  PHPUnit 3.4 by Sebastian Bergmann

  .

  Time: 1 second

  Tests: 1, Assertions: 1, Failures 0

 

  可以看到,上面是經(jīng)過(guò)了測(cè)驗(yàn)。默許狀況下,PHPUnit是會(huì)運(yùn)轉(zhuǎn)測(cè)驗(yàn)用例中的一切測(cè)驗(yàn)辦法的。下面再引見(jiàn)下PHPUnit中相關(guān)的幾個(gè)斷語(yǔ):

 

  AssertTrue/AssertFalse 斷語(yǔ)能否為真值仍是假

  AssertEquals 判別輸出能否和預(yù)期的持平

  AssertGreaterThan 斷語(yǔ)成果能否大于某個(gè)值,相同的也有LessThan(小于),GreaterThanOrEqual(大于等于),

  LessThanOrEqual(小于等于).

  AssertContains 判別輸入能否包括指定的值

  AssertType 判別能否歸于指定類(lèi)型

  AssertNull 判別能否為空值

  AssertFileExists 判別文件能否存在

  AssertRegExp 依據(jù)正則表達(dá)式判別

 

  舉個(gè)比方來(lái)闡明下比方AssertType的運(yùn)用,仍然以上面的比方來(lái)說(shuō),可以用AssertType去判別returnSampleObject回來(lái)的對(duì)象實(shí)例能否為remoteConnect,代碼如下:

 

  function testIsRightObject() {

  $connObj = new RemoteConnect();

  $returnedObject = $connObj->returnSampleObject();

  $this->assertType('remoteConnect', $returnedObject);

  }

  ?>

 

  當(dāng)前PHP結(jié)構(gòu)對(duì)單元測(cè)驗(yàn)的撐持

  當(dāng)前許多優(yōu)異的PHP結(jié)構(gòu)(如Zend Framework,Symfony等),都供給了對(duì)單元測(cè)驗(yàn)很好的撐持。以Zend Framework為例,闡明下其間是如何運(yùn)轉(zhuǎn)單元測(cè)驗(yàn)的。

 

  class CommentControllerTest extends Zend_Test_PHPUnit_ControllerTestCase

  {

  public function setUp()

  {

  parent::setUp();

  }

  public function tearDown()

  {

  parent::tearDown();

  }

  public function appBootstrap()

  {

  $this->frontController->registerPlugin(new Initializer('test'));

  }

  public function testGoHome()

  {

  $this->dispatch('/home');

  $this->assertController('home');

  }

  }

  ?>

 

  以上代碼其實(shí)是對(duì)Zend自身的結(jié)構(gòu)進(jìn)行了一個(gè)單元測(cè)驗(yàn)罷了,可以看到,在Zend中,是經(jīng)過(guò)承繼Zend_Test_PHPUnit_ControllerTestCase去對(duì)Zend的controller去進(jìn)行單元測(cè)驗(yàn)的,可以看到,在zend中的單元測(cè)驗(yàn)跟PHPUnit中的差不多,但添加了別的一些新的斷語(yǔ),比方上面的assertController,詳細(xì)的可以參閱Zend的參閱手冊(cè)。

  PHPUnit是一個(gè)輕量級(jí)的PHP測(cè)驗(yàn)結(jié)構(gòu)。它是在PHP5下面臨JUnit3系列版別的完好移植,是xUnit測(cè)驗(yàn)結(jié)構(gòu)宗族的一員(它們都根據(jù)形式前鋒Kent Beck的描繪)。

  單元測(cè)驗(yàn)是幾個(gè)現(xiàn)代靈敏開(kāi)發(fā)辦法的根底,使得PHPUnit成為許多大型PHP項(xiàng)意圖要害東西。這個(gè)東西也可以被Xdebug擴(kuò)大用來(lái)生成代碼覆蓋率陳述 ,而且可以與phing集成來(lái)自動(dòng)測(cè)驗(yàn),最終它還可以和Selenium整合來(lái)完結(jié)大型的自動(dòng)化集成測(cè)驗(yàn)。

 

  

發(fā)布:2007-03-31 14:58    編輯:泛普軟件 · xiaona    [打印此頁(yè)]    [關(guān)閉]
相關(guān)文章:
鷹潭OA
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢

泛普鷹潭網(wǎng)站建設(shè)公司其他應(yīng)用

鷹潭軟件開(kāi)發(fā)公司 鷹潭門(mén)禁系統(tǒng) 鷹潭物業(yè)管理軟件 鷹潭倉(cāng)庫(kù)管理軟件 鷹潭餐飲管理軟件 鷹潭網(wǎng)站建設(shè)公司