我有一个我使用Moq嘲笑的存储库。
我有一个我嘲笑过的服务。该服务需要在其构造函数中使用存储库,并且我已成功地完成了此操作。
我现在面临的问题是,我希望Repository不连接到数据库,而是使用内存存储来查询/执行操作。
如果我这样做:
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));
然后运行测试,我得到一个例外:
参数计数不匹配
当要调用UserRepository上的Login时调用Service方法。
我做错了什么?我误解了吗?
基本上任何Repository调用都应该重定向或查询内存集合(即List)
这是我的实际服务层方法:
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(...)
行时 - 这就是我得到异常的地方。
答案 0 :(得分:1)
应该是:
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()
的参数相对应。