2016-01-06 82 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 
    } 

    .... 

,应用在上述同样的理论。

相关问题