2016-01-06 73 views
2

我有這個UserRepository類。這是使用mock單元測試存儲庫的正確方法嗎?

public class UserRepo : IUserRepo 
{ 
    public TheUser RegisterUser(UserRegistrationDetails details) 
    { 
     //implementation here 
    } 

    public bool DeleteUser(string username) 
    { 
     //implementation here 
    } 

    public TheUser UpdateUser(TheUser user) 
    { 
     //implementation here 
    } 
} 

現在來測試這一點,我通過實現相同的接口IUserRepo創建一個模擬庫和我的測試類現在稱這個模擬存儲庫。我覺得我在這裏做錯了什麼,因爲我沒有測試過實際的類,而是另一個模擬的實現。我應該如何糾正這一點? Repository是否被測試過?

+0

我建議使用像Moq這樣的模擬框架來基於你的界面實例化模擬類,節省你滾動你自己的時間。 – robaudas

回答

7

你會用你的嘲笑IUserRepo測試類,消耗的IUserRepo,不是爲了考試的UserRepo實施。

public class Consumer 
{ 
    private IUserRepo repo; 

    public Consumer(IUserRepo repo) 
    { 
    this.repo = repo; 
    } 

    public void DoStuff() 
    { 
    // Act upon repository 
    } 
} 

你就可以用你的嘲笑庫測試Consumer,從任何(例如)調用數據庫隔離。

單元測試UserRepo本身,你會通過在依賴

public class UserRepo : IUserRepo 
{ 
    private ISomeDependancy dependancy; 

    public UserRepo(ISomeDependancy dependancy) 
    { 
     this.dependancy = dependancy; 
    } 

    public TheUser RegisterUser(UserRegistrationDetails details) 
    { 
     //implementation here, that consumes this.dependancy 
    } 

    .... 

,應用在上述同樣的理論。

相關問題