基于yaf擴展的PHPUnit測試框架:yaf-phpunit

jopen 10年前發布 | 37K 次閱讀 單元測試 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需求。

項目主頁:http://www.baiduhome.net/lib/view/home/1414396586434

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!