. NET Проверка основного модуля как макетировать HttpContext RemoteIpAddress? - PullRequest
0 голосов
/ 17 марта 2020

У меня есть проект. NET Core 3.1 с использованием Identity. Для обработчика страницы Login я добавил строку кода, которая после входа пользователя обновляет местоположение пользователя на основе его IP-адреса:

_locationRepository.UpdateUserLocationAsync(HttpContext.Connection.RemoteIpAddress);

Полный код

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    returnUrl = returnUrl ?? Url.Content("~/");

    if (ModelState.IsValid)
    {
        // This doesn't count login failures towards account lockout
        // To enable password failures to trigger account lockout, set lockoutOnFailure: true
        var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
        if (result.Succeeded)
        {
            _locationRepo.UpdateUserLocation(HttpContext.Connection.RemoteIpAddress);
            _logger.LogInformation("User logged in.");
            return LocalRedirect(returnUrl);
        }
        if (result.RequiresTwoFactor)
        {
            return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
        }
        if (result.IsLockedOut)
        {
            _logger.LogWarning("User account locked out.");
            return RedirectToPage("./Lockout");
        }
        else
        {
            ModelState.AddModelError(string.Empty, "Invalid login attempt.");
            return Page();
        }
    }

    // If we got this far, something failed, redisplay form
    return Page();
}

Моя проблема в том, что при написании модульного теста я не знаю, как правильно издеваться над HttpContext. Я продолжаю получать исключение нулевой ссылки независимо от того, что я пытался.

var httpContext = new Mock<HttpContext>();
httpContext.Setup(x => x.Connection.RemoteIpAddress).Returns(new IPAddress(16885952));

Как мне высмеивать RemoteIpAddress?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...