Eu tenho um projeto de API da Web , uso o padrão Unit Of Work com dot net 6.0 e quero escrever um teste para ele.
Eu tenho um controlador como abaixo e uma função para autenticação:
public AuthController(IUnitOfWork uow, IStringLocalizer<SharedTranslate> localizer, IJwtAuthenticatorManager jwtAuthenticatorManager) : base(uow, localizer)
{
//...
}
[HttpPost("authenticate")]
public async Task<IActionResult> Authenticate([FromBody] UserLoginViewModel Request)
{
User user = await _uow.UserRepository.GetAsync(u => u.Username == Request.Username);
//...
}
Para um teste de unidade com Moq, uso o código abaixo:
var unitOfWork = new Mock<IUnitOfWork>();
unitOfWork
.Setup(uow =>
uow.UserRepository.GetAsync(It.IsAny<Expression<Func<User, bool>>>()))
.ReturnsAsync(new User());
var localizor = new Mock<IStringLocalizer<SharedTranslate>>();
var jwtManager = new Mock<IJwtAuthenticatorManager>();
var controller = new AuthController(unitOfWork.Object, localizor.Object, jwtManager.Object);
UserLoginViewModel userLoginViewModel = new UserLoginViewModel
{
Username = "test",
Password = "test"
};
var result = await controller.Authenticate(userLoginViewModel);
Quando eu depuro, ele não consegue se conectar ao banco de dados (por exemplo, o objeto user na função Authenticate está vazio) e verifica.
1. Qual é o problema?
2.Este método é bom para teste?