基于yaf擴展的PHPUnit測試框架:yaf-phpunit
Introduction
yaf-phpunit是以Yaf擴展,基于PHPUnit自動化測試的開發框架,目的在于以人為核心,將項目分割為多個服務,進行快速迭代的敏捷開發,同時保證每個環節是可以被測試。
Requirement
- PHP 5.3 + (需要支持命名空間)
Tutorial
Layout
標準項目結構:
+ public
| - index.php // Application entry
| + static/
| + scripts // js script files
| + images // images files
| + styles // css files
+ application
| - Bootstrap.php // Bootstrap
| + config
| - application.ini // Configure
| + controllers
- User.php // User controller
| + views
| + user
- index.html // View template for user controller
| + library
| + models // Models
| + modules // Modules
| + plugins // Plugins
| + cores // 自定義核心文件,autoload
| + exception // 核心異常類,應用公用的異常
|- DatabaseException // 如DB異常...
| - ClassLoader.php // 核心裝載類,注冊自動轉載Core\Service命名空間下的類
| - Controller.php // 核心控制器,應用的控制器將會繼承這個類
| - Model.php // 核心模型,應用的模型將會繼承這個類,同時可以自己構建一些 MySQLModel 等
| - Exception.php // 核心異常類,應用的自定義異常將會繼承這個類
| - ExceptionHandler.php // 核心異常處理類,不啟動YAF本身自帶的異常接收方式,拋出的異常將會被這個類接收
| - View.php // 核心視圖模板引擎類,應用的視圖會繼承這個類,可以重寫一些display,render方法
| - Session.php // 核心會話類,自動判斷當CLI請求時模擬一個虛擬的會話句柄來完成會話操作
| + services // 自定義服務層,每個服務實現自己的業務邏輯,盡量減少耦合度
| + user // 這是一個Http服務例子
|+ Info //
+ tests // 這里測試用例的目錄,以下目錄結構和application一致,測試文件尾部增加Test標識
| + controllers
- UserTest.php // test user controller
| + library // test library
| + modules // test modules
| + models // test models
| + plugins // test plugins
| + services // test Services
| - phpunit.xml // 里面配置的需要測試的測試用例
| - YafUnit.php // 用于模擬測試的核心類,含有View/Request
| - TestCase.php // 測試基類,所有測試類將會繼承這個類,在基境時加載需要的Yaf信息
+ vandor // 第三方composer.json生成的文件夾,里面包含了第三方安裝的所有類庫,不建議修改
- composer.json // 配置composer安裝
DocumentRoot
設置應用訪問的Web根目錄為public下
Nginx Rewrite rules
server {
listen ****;
server_name domain.com;
root document_root;
index index.php index.html index.htm;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?r=/$1 last;
break;
}
}
PHPUnit Testing
[root@centos ~]# cd /var/www/YafUnit
[root@centos tests]# /usr/local/php-5.4.22/bin/php ./vendor/bin/phpunit -c tests/phpunit.xml
PHPUnit 4.0.15 by Sebastian Bergmann.
Configuration read from /var/www/YafUnit/tests/phpunit.xml
...............
Time: 447 ms, Memory: 2.50Mb
OK (15 tests, 24 assertions)
About namespace
以下目錄結構中項目必須存在命名空間,除tests目錄外,命名空間和文件路徑一致才能保證自動裝載,tests目錄默認使用YafUnit做命名空間,防止沖突。
[yourwebroot]/application/cores/
[yourwebroot]/application/services/
[yourwebroot]/tests/
為了以防命名空間的錯亂,可以將類的書寫全部加上全局空間定義,如:
Yaf\Dispatcher => \Yaf\Dispatcher
Core\Session => \Core\Session
Util_Validate => \Util_Validate
More
這個應用的設計初衷是為了實現基本的框架底層,規范框架命名和結構體系,定制自動化測試。
其他核心業務請根據自身場景進行擴展:
- 在Core下擴展需要的Db類, Cache實現方式, 核心Controller等;
- 在Services下完成需要的業務服務,盡量減少各個Service之間的耦合度;
- 在Models下只處理底層的Db數據邏輯,把業務邏輯移動到Service中處理,提高Service的獨立性;
- 在library中屬于本地類庫,按照Yaf自動裝載規則,根據文件類型分類目錄;
- 使用會話時,請使用Core\Session,該對象會自動判斷是否是CLI模式進行Session管理;
- Controller, Model, Service類中都可以增加defaultExceptionHandler靜態方法用于捕捉異常的默認處理;
- 擴展Core\View的方法,如assign,display方法等,不建議引入其他模板引擎;
- 測試用例的目錄結構和application一致,測試文件尾部增加Test標識,為了可以自動生成對應的xml測試列表;
- 可以通過定義 APPLICATION_NOT_RUN 的值,引入public/index.php,實現守護進程/Crontab需求。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!