模拟存储库和回调问题

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()的参数。