模拟存储库和回调问题
Mocking repository and callback issue
我有一个使用 Moq 模拟的存储库。
我有一个我嘲笑过的服务。该服务需要在其构造函数中有一个存储库,我已经成功地做到了这一点。
我现在面临的问题是,我希望存储库不连接到数据库,而是使用内存存储来反对 query/perform 操作。
如果我这样做:
userMockRepository.Setup(r => r.Login(It.IsAny<string>(), It.IsAny<string>()))
.Returns((User u) => users.Find(p => p.Password == u.Password &&
p.Username == u.Username));
然后运行测试,我得到一个异常:
Parameter count mismatch
调用 Service 方法时调用 UserRepository 上的登录。
我做错了什么?我是不是误会了?
基本上任何存储库调用都应该针对内存中的集合(即列表)进行重定向或查询
这是我实际的服务层方法:
var user = uoWContext.UserRepository.Login(request.Username, request.Password);
if (user == null)
{
response.Success = false;
response.FailureInformation = "Invalid username or password";
}
return response;
当它到达行 uowContext.UserRepository.Login(...)
- 这是我得到异常的地方。
应该是:
userMockRepository.Setup(r => r.Login(It.IsAny<string>(), It.IsAny<string>()))
.Returns((string pw, string un) => users.Find(u => u.Password == pw && u.Username == un));
// or
.Returns<string, string>((pw, un) => users.Find(u => u.Password == pw && u.Username == un));
Setup()
的参数应该对应Return()
的参数。
我有一个使用 Moq 模拟的存储库。
我有一个我嘲笑过的服务。该服务需要在其构造函数中有一个存储库,我已经成功地做到了这一点。
我现在面临的问题是,我希望存储库不连接到数据库,而是使用内存存储来反对 query/perform 操作。
如果我这样做:
userMockRepository.Setup(r => r.Login(It.IsAny<string>(), It.IsAny<string>()))
.Returns((User u) => users.Find(p => p.Password == u.Password &&
p.Username == u.Username));
然后运行测试,我得到一个异常:
Parameter count mismatch
调用 Service 方法时调用 UserRepository 上的登录。
我做错了什么?我是不是误会了?
基本上任何存储库调用都应该针对内存中的集合(即列表)进行重定向或查询
这是我实际的服务层方法:
var user = uoWContext.UserRepository.Login(request.Username, request.Password);
if (user == null)
{
response.Success = false;
response.FailureInformation = "Invalid username or password";
}
return response;
当它到达行 uowContext.UserRepository.Login(...)
- 这是我得到异常的地方。
应该是:
userMockRepository.Setup(r => r.Login(It.IsAny<string>(), It.IsAny<string>()))
.Returns((string pw, string un) => users.Find(u => u.Password == pw && u.Username == un));
// or
.Returns<string, string>((pw, un) => users.Find(u => u.Password == pw && u.Username == un));
Setup()
的参数应该对应Return()
的参数。