模拟存储库和回调问题

时间:2015-03-04 18:09:12

标签: c# unit-testing mocking moq

我有一个我使用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(...)行时 - 这就是我得到异常的地方。

1 个答案:

答案 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()的参数相对应。