2012-04-11 101 views
0

我在測試我的應用程序中的一些簡單服務時遇到了問題。這是我的服務方法:功能測試服務

public function createNewCourse($details = array()) 
    { 
     $course = new Course($details); 
     $this->persistenceManager->save($course); 
    } 

基本上我發送一個數組到這個服務,創建$ course對象,它設置對象的屬性。之後,我調用persistenceManager,它基本上有一個將對象插入數據庫的save方法。無論如何,沒有實際測試持久性,如何測試此方法的任何提示,因爲這將是另一個測試。

+0

這不是'單元'測試,因爲您沒有測試'單元'(方法),這是一項功能測試,因爲您正在測試服務的功能以及其中的所有內容。但那只是一個咆哮:D – buymypies 2012-04-11 15:47:43

+0

好吧,爲我的錯誤sry – Mythriel 2012-04-11 15:51:16

回答

3

如果persistanceManagerinjected to your object as a dependancy那麼您可以創建一個mock object來表示它在您的測試中。

如果不是,那麼你將很難進行單元測試,你應該重構你的代碼來使用依賴注入。

別擔心,依賴注入只是一個非常簡單概念的花哨短語。

你將遇到單元測試課程對象的類似問題。

+0

我使用DI注入我的持久性管理器 – Mythriel 2012-04-11 16:28:56

0

使用存根persistenceManager並將其提供給包含createNewCourse方法的類。存根應該是這樣的:

class StubPersistenceManager 
{ 
    private $course; 
    public function save($course) 
    { 
     $this->course = $course; 
    } 
    public function getCourse() 
    { 
     return $this->course; 
    } 
} 

確保你注入該存根實例爲$這個 - >的PersistenceManager在你的類,它包含了createNewCourse方法。

在測試中調用createNewCourse方法,可以隨後通過使用存根的getCourse功能獲取提供給持久性管理過程的實例。