php單元測(cè)試之simpletest

了解單元測(cè)試

????????單元測(cè)試是由程序員自己來(lái)完成,最終受益的也是程序員自己??梢赃@么說(shuō),程序員有責(zé)任編寫(xiě)功能代碼,同時(shí)也就有責(zé)任為自己的代碼編寫(xiě)單元測(cè)試。執(zhí)行單元測(cè)試,就是為了證明這段代碼的行為和我們期望的一致。

????????在單元測(cè)試的過(guò)程中,第一步也是最重要的一步就是要理解我們要測(cè)試的單元原本要做什么,而不是他實(shí)際上做了什么,所以這就要求我們?cè)陂_(kāi)發(fā)代碼的時(shí)候,每一個(gè)單元或者是每一個(gè)函數(shù)都要有一個(gè)概要的規(guī)格說(shuō)明。

學(xué)習(xí)主要的php框架

? ? ? ? 在PHP領(lǐng)域,單元測(cè)試的工具主要有PHPUNIT,PHPUNIT2和SimpleTest三種。其中PHPUNIT在功能上很簡(jiǎn)單,不算完善;PHPUNIT2是專門為PHP5寫(xiě)的單元 測(cè)試工具,在結(jié)構(gòu)和功能上都向Junit看齊;而SimpleTest則是一套非常實(shí)用的測(cè)試工具,其中的webTest支持對(duì)web程序界面的測(cè)試,是 Easy最為推薦的一款測(cè)試工具。本次我主要就是學(xué)習(xí)了simpletest框架。

具體框架的使用

????????Simpletest 使用起來(lái)非常的簡(jiǎn)單和方便,安裝也很容易,只需網(wǎng)上下載安裝包,然后解壓在本地服務(wù)可以訪問(wèn)到的文件夾即可。

接下來(lái)就是它的主要功能:

1)有標(biāo)準(zhǔn)的輸出

它的輸出格式如下:


測(cè)試代碼:

require_once('simpletest/autorun.php');//加載測(cè)試文件之前必須引入的框架入口文件

require_once('../classes/log.php');//要測(cè)試的類文件

class TestOfLogging extends UnitTestCase {

???function testLogCreatesNewFileOnFirstMessage() {

???? ???@unlink('/temp/test.log');

???????$log = new Log('/temp/test.log');

???????$this->assertFalse(file_exists('/temp/test.log'));

???????$log->message('Should write this to a file');

???????$this->assertTrue(file_exists('/temp/test.log'));

??? }

}

這里有幾點(diǎn)說(shuō)明:

1、必須引入框架入口文件 和要測(cè)試的文件

2、新建的類要繼承UnitTestCase等類文件

3、新建的方法要以test開(kāi)頭

同時(shí)如果我們要測(cè)試多個(gè)類,可以將所有的測(cè)試類進(jìn)行合并到一個(gè)文件

如:


class AllTests extends TestSuite

{

???public function __construct()

??? {

???????parent::__construct('All tests for SimpleTest ' . SimpleTest::getVersion());

???????$this->addFile(__DIR__ . '/unit_tests.php');

???????$this->addFile(__DIR__ . '/shell_test.php');


???????/**

????????* The "live" and "acceptance" tests require arunning local webserver on "localhost:8080".

????????* We are using PHP's built-in webserver to serve the"test/site".

????????* The start command for the server is: `php -S localhost:8080 -ttest/site`.

????????*/

???????$this->addFile(__DIR__ . '/live_test.php');

???????$this->addFile(__DIR__ . '/acceptance_test.php');

??? }

}

2)可以進(jìn)行類的模擬

主要代碼如下:

require_once dirname(__FILE__) .'/mock_objects.php';

Mock::generate('Log');


class TestOfSessionLogging extendsUnitTestCase {


???function testLoggingInIsLogged() {

???????$log = &new MockLog();

???????$log->expectOnce('message', array('User fred logged in.'));

???????$session_pool = &new SessionPool($log);

???????$session_pool->logIn('fred');

??? }

}

即我們可以模擬一個(gè)類Log,模擬的類名為MockLog,然后我們就可以像真實(shí)存在一個(gè)類MockLog一樣來(lái)使用這個(gè)類。這樣做的好處就是只專注我們需要測(cè)試的部分,并且不會(huì)因?yàn)槠渌念惔a的改變來(lái)影響我們的測(cè)試類。

3)可以進(jìn)行網(wǎng)頁(yè)測(cè)試

在SimpleTest中的Web測(cè)試是相當(dāng)原始的,因?yàn)闆](méi)有JavaScript。大多數(shù)其他瀏覽器操作都只是模擬請(qǐng)求和發(fā)生數(shù)據(jù)。


require_once('simpletest/autorun.php');

require_once('simpletest/web_tester.php');


class TestOfRankings extends WebTestCase {

???function testWeAreTopOfGoogle() {

???????$this->get('http://google.com/');

???????$this->setField('q', 'simpletest');

???????$this->click("I'm Feeling Lucky");

???????$this->assertTitle('SimpleTest - Unit Testing for PHP');

??? }

}

該段代碼就可以模擬google的搜索操作,并且來(lái)驗(yàn)證返回的title.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,269評(píng)論 25 708
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程,因...
    小菜c閱讀 6,523評(píng)論 0 17
  • 趣味性是人的根本屬性之一,是一個(gè)人幽默風(fēng)趣的基礎(chǔ),做人如果沒(méi)有趣味,那么他跟咸魚(yú)又有什么區(qū)別呢?做人沒(méi)趣味,...
    漢谷教育閱讀 224評(píng)論 0 0
  • 《如何閱讀一本書(shū)》 書(shū)評(píng) 如何閱讀一本書(shū)呢?從學(xué)校畢業(yè)以后,我就認(rèn)...
    柳知否閱讀 354評(píng)論 0 2