2010-05-25 146 views
2

我已經研究了Zend框架的PHPUnit的一些例子,但有一部分我不理解。PHPUnit與Zend框架

在大多數示例中,應用程序引導從 ,setUp()方法中的某種baseClass運行。

爲什麼不在__construct()?有沒有什麼好的理由?

Example iam talking about

回答

7

只是爲了記錄在案,我想這是代碼的混凝土塊你指的是:

class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase 
{ 
    public $application; 

    public function setUp() 
    { 
     $this->application = new Zend_Application(
      APPLICATION_ENV, 
      APPLICATION_PATH . '/config/settings.ini' 
     ); 

     $this->bootstrap = array($this, 'bootstrap'); 
     parent::setUp(); 
    } 

    public function tearDown() 
    { 
     Zend_Controller_Front::getInstance()->resetInstance(); 
     $this->resetRequest(); 
     $this->resetResponse(); 

     $this->request->setPost(array()); 
     $this->request->setQuery(array()); 
    } 

    public function bootstrap() 
    { 
     $this->application->bootstrap(); 
    } 
} 

在單元測試中,setUptearDown方法用於

將世界置於已知狀態並且 然後將其返回到其原始狀態 w測試完成後。這種已知的狀態被稱爲夾具的測試。

xUnit庫的處理方式可能不同,但概念保持不變。另請參見PHPUnit手冊中的fixtures chapter

PHPUnit支持共享設置 代碼。在運行測試方法之前,稱爲setUp()的 模板方法調用爲 。 setUp()是您創建 的對象,您將對其進行 測試。一旦測試方法 運行完成,無論是成功 還是失敗,都會調用另一個名爲tearDown()的模板方法 。 tearDown()是清理您測試的對象 的地方。

因此,PHPUnit的負責執行setUp方法的之前包括在測試用例類的每一個試驗方法,而tearDown在每次執行之後進行處理。

具有所述,Zend框架與PHPUnit的頂部上的附加層提供了在特徵上,而不是源代碼各個單元運行功能測試,這是,黑盒裝測試。這是通過擴展Zend_Test_PHPUnit_ControllerTestCase來實現的,以保證對應用程序資源的訪問。

在此特定示例中,應用程序在執行測試用例中的每個測試之前進行引導。如果我們考慮到我們不需要任何地方的應用程序資源,例如在原始單元測試(其他測試用例的一部分)中,這是有道理的。