我有一个Web API项目,我使用dot net 6.0的工作单元模式,并想为其编写测试。
我有一个如下所示的控制器和一个用于身份验证的函数:
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);
//...
}
对于 Moq 的单元测试,我使用以下代码:
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);
当我调试它时,它无法连接到数据库(例如身份验证函数中的对象用户为空)并检查。
1.问题是什么?
2.这个方法适合测试吗?