首頁  >  文章  >  後端開發  >  Yii框架官方指南系列增補版37-測試:概覽

Yii框架官方指南系列增補版37-測試:概覽

黄舟
黄舟原創
2017-02-15 09:42:481120瀏覽



測試是軟體開發中必不可少的環節.無論我們是否意識到,在開發Web應用的時候,我們始終都是在測試的.例如, 當我們用PHP寫了一個類時, 我們可能會用到一些注入echodie 語句來顯示我們是否正確地實現了某個方法;當我們實現了包含一套複雜的HTML表單的web頁面時, 我們可能會試著輸入一些測試數據來確認頁面是否是按照我們的預期來交互的.更高級的開發者則會寫一些代碼來自動完成這個測試過程, 這樣一來每當我們需要測試一些東西的時候, 我們只需要調用代碼, 剩下來的就交給計算機了. 這就是所謂的自動測試, 也是本章的主要話題.

Yii 提供的測試支持包括單元測試功能測試.

單元測試檢驗了程式碼的一個獨立單元是否按照預期工作. 在物件導向程式設計中, 最基本的程式碼單元就是類別. 因此, 單元測試的主要職責就是校驗這個類別所實現的每個方法工作都是正常的. 單元測試通常是由開發了這個類的人來編寫.

功能測試檢驗了特性是否按照預期工作(如:在一個博客系統裡的提交操作).與單元測試相比, 功能測試通常要高級一些, 因為待測試的特性常常牽涉到多個類別. 功能測試通常是由非常了解系統需求的人編寫.(這個人既可以是開發者也可以是品質工程師).

1. 測試驅動開發

以下展示的便是所謂的測試驅動開發(TDD) 的開發週期:

  1. 創建一個涵蓋要實現的特性的新的測試. 測試預計將在第一次執行的時候失敗, 因為特性尚未實現.

  2. 執行所有測試,確保這個新的測試是失敗的.

  3. 編寫程式碼來使得測試通過.

  4. 執行所有測試,確保所有測試通過.

  5. 執行所有測試,確保所有測試通過.

並重構新編寫的程式碼確保這些測試仍然能夠通過.

重複步驟1至5推進整體功能的實現.

2. 構建測試環境Yii 提供的測試支援需要PHPUnit 3.5+ 和Selenium Remote Control 1.0+。 (Linux中安裝PHPUnit參考這篇文章:Ubuntu中安裝PHPUnit的詳細步驟及報錯的解決辦法,Windows中安裝PHPUnit可參考這篇文章:在windows中安裝Pear及PHPUnit詳細教程,Selenium下載地址在這裡:點擊下載)

當我們使用yiic webapp 控制台命令來創建一個新的Yii 應用時, 它將生成以下文件和目錄供我們來編寫和完成測試.<pre class="brush:php;toolbar:false">testdrive/    protected/                包含了受保护的应用文件       tests/                 包含了应用测试          fixtures/           包含了数据 fixtures          functional/         包含了功能测试          unit/               包含了单元测试          report/             包含了 coverage 报告          bootstrap.php       这个脚本在一开始执行          phpunit.xml         PHPUnit 配置文件          WebTestCase.php     基于 Web 的功能测试基类</pre>如上所示的, 我們的測試程式碼主要放在fixtures, functional

unit

這三個目錄下,

report

目錄則用於存儲生成的代碼coverage 報告.我們可以在控制台測試(無論是單元測試還是功能測試):<pre class="brush:php;toolbar:false">% cd testdrive/protected/tests % phpunit functional/PostTest.php    // 执行单个测试 % phpunit --verbose functional       // 执行 'functional' 下的所有测试 % phpunit --coverage-html ./report unit</pre>上面的最後一條命令將執行

unit

目錄下的所有測試然後在

report

目錄下生成一份code-coverage 報告. 注意要產生code-coverage 報告必須安裝並開啟PHP的xdebug 擴充功能.3. 測試的引導腳本

讓我們來看看
bootstrap.php

檔案裡會有些什麼. 首先這個檔案有點特殊,因為它看起來很像是入口腳本, 而它也正是我們執行一系列測試的入口.

<pre class="brush:php;toolbar:false">$yiit='path/to/yii/framework/yiit.php'; $config=dirname(__FILE__).'/../config/test.php'; require_once($yiit); require_once(dirname(__FILE__).'/WebTestCase.php'); Yii::createWebApplication($config);</pre>如上所示, 首先我們包含了來自Yii 框架的yiit.php 文件, 它初始化了一些全局常量以及它初始化了一些全局常量以及必要的測試基底類別.然後我們使用test.php 這個設定檔來建立一個應用實例.如果你查看test.php 檔案, 你會發現它是繼承自

main.php

這個設定檔的,只不過它多加了一個類別名為CDbFixtureManager 的
fixture

應用元件.我們將在下一節中詳細的介紹fixtures.

<pre class="brush:php;toolbar:false">return CMap::mergeArray(     require(dirname(__FILE__).'/main.php'),     array(         'components'=&gt;array(             'fixture'=&gt;array(                 'class'=&gt;'system.test.CDbFixtureManager',             ),             /* 去除以下注释可为测试提供一个数据库连接.             'db'=&gt;array(                 'connectionString'=&gt;'DSN for test database',             ),             */         ),     ) );</pre>

rrreee

rrreee

🎜🎜🎜🎜rrreee🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜🎜🎜🎜我們應該提供一個測試專用的資料庫以便測試執行不會幹擾到正常的開發或生產活動. 這樣一來, 我們紙需要去除上面🎜db🎜 配置的註釋, 然後填寫🎜connectionString🎜 屬性的用以連接到資料庫的DSN(資料來源名稱)即可.🎜🎜通過這樣一個啟動腳本, 當我們執行單元測試時, 我們便可以獲得一個與服務需求類似的應用實例, 而主要的不同就是測試擁有一個fixture 管理器以及它專屬的測試資料庫.🎜🎜測試系列教程:🎜🎜Yii框架官方指南系列38——定義特定狀態(Fixtures)🎜🎜Yii框架官方指南系列39——單元測試(Unit Testing)🎜🎜Yii框架官方指南系列40-測驗:功能測驗(Functional Testing )🎜

以上就是Yii框架官方指南系列增補版37-測試:概覽的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn