2013-11-20 29 views
0

我將一些代碼從模型移動到我應用中的Lib,因爲它可以從2個模型中使用並且與數據庫不相關。它是一個上傳處理程序,從我的兩個模型中使用。它被放置在/app/Lib/UploadHandler.php 這是有效的。 Hurray ...如何在CakePHP2.4中測試Lib?

但是:如何爲我的Lib編寫單元測試?這是一個不屬於供應商文件夾的第三方類庫。我在 創建的TestClass在新文件夾「LIB」 /app/Test/Case/Lib/UploadHandlerTest.php

我要做迄今:

App::uses('UploadHandler', 'Lib'); 

/** 
* UploadHandler Test Case 
* 
*/ 
class UploadHandlerTestCase extends CakeTestCase 
{ 
    /** 
    * Fixtures 
    * 
    * @var array 
    */ 
    public $fixtures = array(); 

    /** 
    * setUp method 
    * 
    * @return void 
    */ 
    public function setUp() { 
     parent::setUp(); 

     $this->UploadHandler = ClassRegistry::init('UploadHandler'); 
    } 

    /** 
    * tearDown method 
    * 
    * @return void 
    */ 
    public function tearDown() { 
     unset($this->UploadHandler); 

     parent::tearDown(); 
    } 




    public function testHandleFileUpload() {.... 

,給了我這樣的錯誤: MissingTableException 在數據源測試中未找到模型UploadHandler的表sang_upload_handlers。 測試用例:UploadHandlerTestCase(testHandleFileUpload)

但是 - 嘿,我不需要數據庫!我所有的方法都是使用公開方法提供的數據運行的。

什麼是我的測試類的正確初始化?

謝謝你的幫助!

災難珍妮

回答

0

所以,如果任何人,除了我有興趣的話我找到了一種方法,使其工作像我想要的。

首先文件夾結構:

類的位置:

應用程序/ LIB/MyLib.php

Test類的位置:

應用/測試/外殼/ LIB/MyLibTest.php

通過這個,您可以在CakePHP瀏覽器web界面中看到您的庫的測試。

第二:如何防止關於dabase表的錯誤。 答案很簡單:只要讓你的測試類擴展CakeTestCase而不是使用CakeTestCase,但使用原始的PHPUnit_Framework_TestCase,你將不會遇到缺少表的問題。

咄....

例子:

require_once DS.'var'.DS.'www'.DS.'myproject'.DS.APP_DIR.DS.'/Lib/UploadHandler.php'; 

/** 
* UploadHandler Test Case 
* 
*/ 
class UploadHandlerTestCase extends PHPUnit_Framework_TestCase 
{.... 

我很高興能幫助自己;)我想了很多睡眠的一年中的變化時做的伎倆;)

Calamity Jane

相關問題