这是使用模拟对存储库进行单元测试的正确方法吗?
Is this the correct way to Unit test the repository using mocks?
我有这个UserRepository
class。
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
创建了一个模拟存储库,我的测试 class 现在调用这个模拟存储库。我觉得我在这里做错了什么,因为我没有测试实际的 UserRepository
class 而是另一个模拟的实现。我应该如何纠正这个问题?存储库是否经过测试?
您将使用模拟的 IUserRepo
来测试消耗 IUserRepo
的 类,而不是测试 UserRepo
的实现。
public class Consumer
{
private IUserRepo repo;
public Consumer(IUserRepo repo)
{
this.repo = repo;
}
public void DoStuff()
{
// Act upon repository
}
}
您可以使用 Mocked 存储库测试 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
}
....
并应用与上述相同的理论。
我有这个UserRepository
class。
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
创建了一个模拟存储库,我的测试 class 现在调用这个模拟存储库。我觉得我在这里做错了什么,因为我没有测试实际的 UserRepository
class 而是另一个模拟的实现。我应该如何纠正这个问题?存储库是否经过测试?
您将使用模拟的 IUserRepo
来测试消耗 IUserRepo
的 类,而不是测试 UserRepo
的实现。
public class Consumer
{
private IUserRepo repo;
public Consumer(IUserRepo repo)
{
this.repo = repo;
}
public void DoStuff()
{
// Act upon repository
}
}
您可以使用 Mocked 存储库测试 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
}
....
并应用与上述相同的理论。