程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> phpunit功能點整理

phpunit功能點整理

編輯:關於PHP編程

    設置場景 創建數組Fixtures   [php]   protected function setUp()   {   // 創建數組fixture。   $this->fixture = array();   }           “套件級裝配器” 共享fixture即sharedFixture PHPUnit_Framework_TestSuite對象的$sharedFixture屬性在PHPUnit_Framework_TestSuite對象集合及PHPUnit_Framework_TestCase對象中都可用。 [php]  protected function setUp()   {   $this->sharedFixture = new PDO(     'mysql:host=wopr;dbname=test',     'root',     ''   );   }           provider數據提供者     使用數據提供者   組織測試套件       PHPUnit框架的PHPUnit_Framework_TestSuite類允許我們將一些測試組織在若干測試套件構成的一個層次結構中。讓我們通過一個例子看看PHPUnit特有的測試套件。     范例 7.1顯示一個刪節版本的Tests/AllTests.php,范例 7.2顯示一個刪節版本的Tests/Framework/AllTests.php。    第一級: [php]  <?php   if (!defined('PHPUnit_MAIN_METHOD')) {       define('PHPUnit_MAIN_METHOD', 'AllTests::main');   }       require_once 'PHPUnit/Framework.php';   require_once 'PHPUnit/TextUI/TestRunner.php';       require_once 'Framework/AllTests.php';   // ...       class AllTests   {       public static function main()       {           PHPUnit_TextUI_TestRunner::run(self::suite());       }           public static function suite()       {           $suite = new PHPUnit_Framework_TestSuite('PHPUnit');               $suite->addTest(Framework_AllTests::suite());           // ...               return $suite;       }   }       if (PHPUnit_MAIN_METHOD == 'AllTests::main') {       AllTests::main();   }   ?>         第二級:   [php]   <?php   if (!defined('PHPUnit_MAIN_METHOD')) {       define('PHPUnit_MAIN_METHOD', 'Framework_AllTests::main');   }       require_once 'PHPUnit/Framework.php';   require_once 'PHPUnit/TextUI/TestRunner.php';       require_once 'Framework/AssertTest.php';   // ...       class Framework_AllTests   {       public static function main()       {           PHPUnit_TextUI_TestRunner::run(self::suite());       }           public static function suite()       {           $suite = new PHPUnit_Framework_TestSuite('PHPUnit Framework');               $suite->addTestSuite('Framework_AssertTest');           // ...               return $suite;       }   }       if (PHPUnit_MAIN_METHOD == 'Framework_AllTests::main') {       Framework_AllTests::main();   }   ?>         第三級: [php]   <?php   /**   * PHPunit測試套件   * /tests/Framework/Framework/AssertTest.php   * @anthor Chen Wei Han   * @copyright  2011-7-6下午02:10:29   * @package phpunit   * @todo   */   //require_once 'PHPUnit/Framework.php';   class Framework_Framework_AssertTest extends PHPUnit_Framework_TestCase{       public function testNewArrayIsEmpty()       {       // 創建數組fixture。            $fixture = array();             // 斷言數組fixture的尺寸是0。            $this->assertEquals(0, sizeof($fixture));       }           public function testArrayContainsAnElement()       {       // 創建數組fixture。            $fixture = array();             // 向數組fixture增加一個元素。            $fixture[] = 'Element';             //斷言數組fixture的尺寸是1。            $this->assertEquals(1, sizeof($fixture));       }   }   ?>         類Framework_AssertTest是個擴展了PHPUnit_Framework_TestCase的標准測試用例。   運行Tests/AllTests.php則使用TextUI測試啟動器運行全部測試,然而運行Tests/Framework/AllTests.php則只運行類PHPUnit_Framework_*的測試。       套件級裝配器   類PHPUnit_Framework_TestSuite提供兩個模板方法,setUp()和tearDown(),它們分別在測試套件的首個測試前和最後測試後被調用。 [php]  <?php   require_once 'MyTest.php';       class MySuite extends PHPUnit_Framework_TestSuite   {       public static function suite()       {           return new MySuite('MyTest');       }           protected function setUp()       {           print "\nMySuite::setUp()";       }           protected function tearDown()       {           print "\nMySuite::tearDown()";       }   }   ?>         未完成和跳過的測試   public function testSomething() { }   如果我們分別將成功的測試和失敗的必做綠燈和紅燈,我們還需要黃燈標記未完成或未實現的測試。PHPUnit_Framework_IncompleteTest是個標記接口,用於標記當測試結果為未完成或當前未實現時引發的異常。   [php]   <?php   require_once 'PHPUnit/Framework.php';       class SampleTest extends PHPUnit_Framework_TestCase   {       public function testSomething()       {           //可選:隨便測試什麼都可以。           $this->assertTrue(TRUE, 'This should already work.');               // 在這兒停住並將測試標記為未完成。           $this->markTestIncomplete(             'This test has not been implemented yet.'           );       }   }   ?>         跳過的測試   特定的環境中並非所有的測試都能運行。考慮個例子,一個具有多個驅動以支持不同數據庫系統的數據庫提取層。MySQL驅動的測試當然只能在MySQL服務器上運行。 $this->markTestSkipped   [php]  <?php   require_once 'PHPUnit/Framework.php';       class DatabaseTest extends PHPUnit_Framework_TestCase   {       protected function setUp()       {           if (!extension_loaded('mysqli')) {               $this->markTestSkipped(                 'The MySQLi extension is not available.'               );           }       }           public function testConnection()       {           // ...       }   }   ?>           PHPUnit_Framework_TestResult   當你在運行所有這些測試時,你需要在某處存儲所有結果:運行了多少測試,哪個失敗了,以及他們耗時多久。   PHPUnit自帶兩個具體的測試裝飾者:PHPUnit_Extensions_RepeatedTest和PHPUnit_Extensions_TestSetup。前一個用於重復運行一個測試,並且只當所有迭代都成功時才算成功。後面一個在第 6 章中討論過。    要定制PHPUnit_Framework_TestResult,沒必要編寫它的整個子類。大多時候,實現一個新PHPUnit_Framework_TestListener(見表 22.14)並在運行測試前附在PHPUnit_Framework_TestResult對象上就夠了。   范例 23.4: 運行和觀測測試套件 [php]  www.2cto.com <?php   require_once 'PHPUnit/Framework.php';       require_once 'ArrayTest.php';   require_once 'SimpleTestListener.php';       // 創建一個包括測試套件,來自類ArrayTest的測試。   $suite = new PHPUnit_Framework_TestSuite('ArrayTest');       // 創建一個測試結果,並附上一個SimpleTestListener對象作為對它的觀測者。   $result = new PHPUnit_Framework_TestResult;   $result->addListener(new SimpleTestListener);       // 運行測試。   $suite->run($result);   ?>    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved