Я издеваюсь над процедурой входа в систему для идентификации asp.net и, к моему удивлению, _mockSignInManager.Setup(
x => x.PasswordSignInAsync(It.IsAny<IdentityUser>(), It.IsAny<string>(), It.IsAny<bool>(), It.IsAny<bool>())).ReturnsAsync(SignInResult.Success);
не возвращает SignInResult.Success
.В приведенном ниже коде var result
возвращает null
и ломает программу.Это очень странно для меня, потому что CreateAsync()
с UserManager возвращает Task<IdentityResult>
, а это PasswordSignInAsync()
возвращает Task<SignInResult>
.Тем не менее, этот другой тест работает нормально, а это не так.Код ниже:
LoginModelTests
[TestFixture]
public class LoginModelTests
{
private Mock<FakeSignInManager> _mockSignInManager;
private Mock<LoginModel.InputModel> _mockInputModel;
[SetUp]
public void SetUp()
{
_mockSignInManager = new Mock<FakeSignInManager>();
_mockInputModel = new Mock<LoginModel.InputModel>();
SetUpFakeSignInManager();
}
[Test]
public async Task OnPostAsync_StateUnderTest_ExpectedBehavior()
{
// Arrange
var unitUnderTest = new LoginModel(_mockSignInManager.Object, _mockInputModel.Object);
// Act
var result = await unitUnderTest.OnPostAsync("/asdsad/asda");
var okResult = result as OkObjectResult;
// Assert
if (okResult != null && okResult.StatusCode == 200)
Assert.Pass();
}
private void SetUpFakeSignInManager()
{
_mockSignInManager.Setup(
x => x.PasswordSignInAsync(It.IsAny<IdentityUser>(), It.IsAny<string>(), It.IsAny<bool>(),
It.IsAny<bool>())).Returns(Task.FromResult(SignInResult.Success));
}
LoginModel
public class LoginModel : PageModel
{
private readonly SignInManager<IdentityUser> _signInManager;
public LoginModel(SignInManager<IdentityUser> signInManager, InputModel inputModel)
{
_signInManager = signInManager;
Input = inputModel;
}
[BindProperty]
public InputModel Input { get; set; }
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
_logger.LogInformation("User logged in.");
return LocalRedirect(returnUrl);
}
}
return Page();
}
}