Как мне издеваться над методом базового класса тестируемого класса - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь смоделировать класс, который занимается регистрацией пользователей в системе (Asp.Net Core Identity) , и когда я перехожу тестовый код, я вижу, что он явно не работает в закомментированном видекод в RegisterModel ниже. Закомментированный код в RegisterModelTests - это код, который я пробовал при онлайн-копании, но все равно не работает .Любая помощь приветствуется!

RegisterModel

public class RegisterModel : PageModel
{
    private readonly UserManager<IdentityUser> _userManager;

    public RegisterModel(
        UserManager<IdentityUser> userManager)
    {
        _userManager = userManager;
    }

    public async Task<IActionResult> OnPostAsync(
        string returnUrl = null)
    {
        returnUrl = returnUrl ?? Url.Content("~/");
        if (ModelState.IsValid)
        {
            var user = new IdentityUser { UserName = "test", Email = "test" };
            var result = await _userManager.CreateAsync(user, "test");

            if (result.Succeeded)
            {
                var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                /*var callbackUrl = Url.Page(
                    "/Account/ConfirmEmail",
                    pageHandler: null,
                    values: new { userId = 23, code = code },
                    protocol: Request.Scheme);
                LocalRedirect(returnUrl);*/
            }
        }
        return Page();
    }
}

RegisterModelTests

[TestFixture]
public class RegisterModelTests
{
    private Mock<FakeUserManager> _mockUserManager;

    [SetUp]
    public void SetUp()
    {
        _mockUserManager = new Mock<FakeUserManager>();
        SetUpFakeUserManager();
    }

    public RegisterModel CreateRegisterModel()
    {
        return new RegisterModel(
            _mockUserManager.Object,
        );
    }

    [Test]
    public async Task GivenValidInput_OnPostAsync_CreatesANewUser()
    {
        // Arrange
        //var mockRegisterModel = new Mock<RegisterModel>() {CallBase = true};
        // mockRegisterModel.Setup(x => x.Url.Page(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<IdentityUser>(),
        //        It.IsAny<string>())).Returns("Completed");
        var unitUnderTest = CreateRegisterModel();

        // Act
        //var result = await mockRegisterModel.Object.OnPostAsync("/asdsad/asda");
        var result = await unitUnderTest.OnPostAsync("/asdsad/asda");

        // Assert
        if (result != null)
            Assert.Pass();
    }

    private void SetUpFakeUserManager()
    {
        _mockUserManager.Setup(x => x.CreateAsync(It.IsAny<IdentityUser>(), It.IsAny<string>()))
            .ReturnsAsync(IdentityResult.Success);
    }
...