2009-11-18 31 views
0

因此,我已經在我的ZF 1.9.5應用程序中設置了測試,這要歸功於this tutorial,我能夠測試我的控制器,現在我想爲表單創建一個測試。但是,我遇到PHPUnit無法找到我的表單的問題。如何在Zend Framework 1.8+中測試我的表單?

Fatal error: Class 'Default_Form_AccountProfile' not found 

我延長PHPUnit_Framework_TestCase代替Zend_Test_PHPUnit_ControllerTestCase,因爲它不是一個控制器。這是正確的做法嗎?這是我的測試:

<?php 

class AccountProfileTest extends PHPUnit_Framework_TestCase 
{ 
    public function testPopulate() 
    { 
     $form = new Default_Form_AccountProfile(); 
     $user = array(
      'firstName' => 'Joe', 
      'lastName' => 'Schmoe' 
     ); 
     $form->populate($user); 
     $this->assertEquals($form->getElement('firstName')->getValue(), 'Joe'); 
     $this->assertEquals($form->getElement('lastName')->getValue(), 'Schmoe'); 
    } 
} 

我在做什麼錯?在Zend Framework中測試表單的正確方法是什麼?

回答

0

對於你的問題最簡單的解決方案是'require_once'你的表單在這個文件的開頭(或在調用新的Default_Form之前)所在的php文件。

順便說一句,有沒有一個特定的原因,你爲什麼要測試Zend_Form的默認行爲? Zend_Form的測試已經寫好了,如果你下載完整版本的ZF,你可以得到它們。如果您使用的表單具有自己的特定方法,或者覆蓋了一些Zend_Forms方法,那麼測試這些方法是有意義的。

+0

我想覆蓋默認的填充方法,但我不確定原始方法是如何工作的,所以我想做一些測試來了解它是如何工作的。 – Andrew 2009-11-18 20:54:31

+0

我試過使用一次,但它也找不到Zend_Form類。我有一種感覺,我的測試將會被要求陳述散佈。有沒有不同的方法可以包含所有我需要的類,而無需專門調用它們? – Andrew 2009-11-18 20:57:20

+0

您必須設置包含路徑,以便您的單元測試可以找到您的Zend庫。如果你不想require_once你要測試的所有類,你必須設置自動加載器並且包含路徑,就像你在應用程序引導中所做的那樣。將所有這些代碼放在TestHelper.php中,並告訴phpunit使用TestHelper在運行測試之前設置您的環境。看看phpunit的文檔。我還沒有看到你所指的教程,因此我不知道你的其他測試是如何設置的。 – 2009-11-19 08:29:04

0

如果你看看你的application.ini,看看如果你使用Zend_Tool來創建你的Zend Framework框架,那麼在「appnamespace」這一行默認爲「Application」。

爲了防止發生此錯誤,您可以將此設置更改爲「Default」或將所有Default_ *類重命名爲Application_ *(在這種情況下,這意味着您將「Default_Form_AccountProfile」重命名爲「Application_Form_AccountProfile」) 。

相關問題