2015-01-11 205 views
0

我應該如何測試控制器?首先,我嘲笑數據庫結果,這很明顯。但那又如何?我應該重寫控制器的代碼,並測試所有查詢以防止模仿嗎?或者更確切的說調用控制器類,並測試整體結果?我的意思是,例如,具有此類:單元測試控制器實踐

class User { 

    public function foo() 
    { 
     // query 1 
     // query 2 
     return $someresults; 
    } 

} 

我應該測試它這樣的:

class TestUser { 

    public testFoo() 
    { 
     // query1 
     // assertions 
     // query2 
     // assertions 
     // results asserions 
    } 

} 

確切地說像:

class TestUser { 

    public function testFoo() 
    { 
     $user = new User($mockEntityManager); 
     // assertions on $user object 
    } 

} 

什麼是做到這一點的正確方法?測試所有查詢會使代碼翻倍,並在存儲庫類中產生外部查詢問題(不確定是否可以嘲笑)。測試一般結果是好的,但控制器中的方法返回視圖模板,所以我不知道我該如何測試數據庫響應。

+0

有太多可能的答案,或者對於這種格式太好的答案太長。請添加詳細信息以縮小答案集或隔離幾個段落中可以回答的問題。 – Ziumin

回答

0

恕我直言,最好的辦法是將控制器定義爲服務(如描述here),所以你不需要webcrawler來處理請求/響應,但只能與他的trhow模擬服務交互。對於進一步的細節

檢查this article

希望這有助於

0

你不應該單元測試控制器,因爲它們不包含任何邏輯本身。您應該需要對其進行功能測試,以便您可以驗證其行爲是否符合您的要求。