模拟 IPasswordHasher.HashPassword returns 空

Mocked IPasswordHasher.HashPassword returns null

我嘲笑过IPasswordHasher<User>>:

private readonly Mock<IPasswordHasher<User>> _passwordHasher = new();

private readonly AccountController _accountController;

public AccountControllerTests()
{
    _accountController = new AccountController(_passwordHasher.Object);
}

然后我在我的测试方法中调用了这个模拟的AccountController

var result = _accountController.Login(dto);

并且在这个方法中,hash 为空,即使 userdto.Password 不为空并且它在“正常”(非模拟)环境中工作:

var hash = _passwordHasher.HashPassword(user, dto.Password);

您需要为模拟对象设置方法调用。

在测试的构造函数中 class,例如,您可以添加

_passwordHasher
    .Setup(m => m.HashPassword(It.IsAny<User>(), It.IsAny<string>()))
    .Returns("Hash value");