溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中PHPUnit的安裝和用法

發布時間:2021-09-04 15:24:23 來源:億速云 閱讀:198 作者:chen 欄目:編程語言

本篇內容主要講解“PHP中PHPUnit的安裝和用法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“PHP中PHPUnit的安裝和用法”吧!

開始動手安裝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 測試方法中是不能接收參數的。

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

<?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;    }  }  ?>

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

<?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方法是在每個測試用例運行前進行一些初始化的工作,而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,代碼如下:

<?php  function testIsRightObject() {    $connObj = new RemoteConnect();    $returnedObject = $connObj->returnSampleObject();    $this->assertType('remoteConnect', $returnedObject);  }  ?>

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

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

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

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

到此,相信大家對“PHP中PHPUnit的安裝和用法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女