我有这个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
类,而是另一个模拟的实现。我该怎么纠正这个?存储库是否经过测试?
答案 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
}
....
并应用与上述相同的理论。