这是使用模拟单元测试存储库的正确方法吗?

时间:2016-01-06 14:40:55

标签: c# .net unit-testing repository-pattern

我有这个UserRepository课程。

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创建了一个模拟存储库,我的测试类现在调用了这个Mock存储库。我觉得我在这里做错了,因为我没有测试实际的UserRepository类,而是另一个模拟的实现。我该怎么纠正这个?存储库是否经过测试?

1 个答案:

答案 0 :(得分:7)

您可以使用模拟的IUserRepo来测试使用IUserRepo的类,而不是测试UserRepo的实现。

public class Consumer
{
  private IUserRepo repo;  

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

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

您可以使用Mocked存储库测试Consumer,将其与任何(例如)db调用隔离。

要对单元测试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
   }

   ....

并应用与上述相同的理论。