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

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

PHPUnit

申請免費試用、咨詢電話:400-8352-114

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

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

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

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

  大家往往會說:已然單元測驗這么好,為什么那么多人仍是不大情愿去寫單元測驗?zāi)?有以下幾種了解上的誤曲:

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

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

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

  開端著手裝置PHPUnit

  本文中將經(jīng)過引見PHP中的單元測驗利器PHPUnit(http://phpunit.de/),并經(jīng)過實踐比方來解說如安在實踐任務(wù)中運用PHPUnit。首要裝置PHPUnit的辦法可以經(jīng)過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)過手動辦法去裝置,可以參閱PHPUnit的手冊去裝置(http://www.phpunit.de/manual/3.0/en/installation.html)。

  編寫第一個單元測驗用例

  下面咱們開端編寫第一個單元測驗用例。在編寫測驗用例時,要恪守如下的PHPUnit的規(guī)矩:

  1 普通地,在測驗用例中,可以擴大PHPUnit_Framework_TestCase類,這樣就可以運用象setUp(),tearDown()等辦法了。

  2 測驗用例的姓名最棒是運用約定俗成的格局,即在被測驗類的后邊加上”Test”,比方要測驗的類為RemoteConnect,則測驗用例的命名為RemoteConnectTest。

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

  4 測驗辦法中是不能接納參數(shù)的。

  下面首要舉個簡略的比方,代碼如下:

 

  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;

  }

  }

  ?>

 

  面的代碼其實是完結(jié)連接到一個指定的服務(wù)器的功用,那么咱們可以編寫測驗代碼如下:

 

  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辦法是在每個測驗用例運轉(zhuǎn)前進行一些初始化的任務(wù),而tearDown則在每個測驗用例運轉(zhuǎn)后進行一些比方資源的開釋等任務(wù)。在測驗辦法中,經(jīng)過運用PHPUnit的斷語assertTrue去判別所回來的布爾值能否為真,這里是經(jīng)過調(diào)用RemoteConnect.php中的connectToServe辦法去判別能否連接上服務(wù)器。

  接下來咱們運轉(zhuǎn)這個單元測驗,在命令行下輸入代碼:

  phpunit /path/to/tests/RemoteConnectTest.php即可,可以看到測驗順暢經(jīng)過的話,會輸出以下成果:

 

  PHPUnit 3.4 by Sebastian Bergmann

  .

  Time: 1 second

  Tests: 1, Assertions: 1, Failures 0

 

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

 

  AssertTrue/AssertFalse 斷語能否為真值仍是假

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

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

  LessThanOrEqual(小于等于).

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

  AssertType 判別能否歸于指定類型

  AssertNull 判別能否為空值

  AssertFileExists 判別文件能否存在

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

 

  舉個比方來闡明下比方AssertType的運用,仍然以上面的比方來說,可以用AssertType去判別returnSampleObject回來的對象實例能否為remoteConnect,代碼如下:

 

  function testIsRightObject() {

  $connObj = new RemoteConnect();

  $returnedObject = $connObj->returnSampleObject();

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

  }

  ?>

 

  當(dāng)前PHP結(jié)構(gòu)對單元測驗的撐持

  當(dāng)前許多優(yōu)異的PHP結(jié)構(gòu)(如Zend Framework,Symfony等),都供給了對單元測驗很好的撐持。以Zend Framework為例,闡明下其間是如何運轉(zhuǎ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');

  }

  }

  ?>

 

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

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

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

 

  

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

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

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

咨詢:400-8352-114

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

QQ在線咨詢

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

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