php單元測試之simpletest

了解單元測試

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

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

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

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

具體框架的使用

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

接下來就是它的主要功能:

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

它的輸出格式如下:


測試代碼:

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

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

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'));

??? }

}

這里有幾點說明:

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

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

3、新建的方法要以test開頭

同時如果我們要測試多個類,可以將所有的測試類進行合并到一個文件

如:


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)可以進行類的模擬

主要代碼如下:

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');

??? }

}

即我們可以模擬一個類Log,模擬的類名為MockLog,然后我們就可以像真實存在一個類MockLog一樣來使用這個類。這樣做的好處就是只專注我們需要測試的部分,并且不會因為其他的類代碼的改變來影響我們的測試類。

3)可以進行網(wǎng)頁測試

在SimpleTest中的Web測試是相當(dāng)原始的,因為沒有JavaScript。大多數(shù)其他瀏覽器操作都只是模擬請求和發(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的搜索操作,并且來驗證返回的title.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容