【问题标题】:Mock IHttpContextAccessor in Integration Tests在集成测试中模拟 IHttpContextAccessor
【发布时间】:2021-10-06 15:27:19
【问题描述】:

我想在控制器中测试一种从IHttpContextAccessor.HttpContext.Connection.RemoteIpAddress 检索值的方法。

是否可以自定义WebApplicationFactory 设置固定IP地址?

解决方法是将上面的表达式包装到服务中,以便对其进行模拟。

谢谢

Test.cs

var ipAddress = IPAddress.Parse("192.168.1.123");
var factory = new WebApplicationFactory<Startup>();
// ?

using var client = factory.CreateClient();
var response = await client.GetAsync(new Uri("https://localhost/test"), UriKind.Relative));
var ipAddress = await response.Content.ReadAsStringAsync();

TestController.cs

  private readonly IHttpContextAccessor _httpContextAccessor;

  public TestController(IHttpContextAccessor httpContextAccessor)
        {

            _httpContextAccessor = httpContextAccessor;
        }

  [HttpGet("test")]
  public async Task<IActionResult> GetTest()
  {

      var ipAddressObj = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress;

      var ipAddress = ipAddressObj?.ToString();

      return Ok(ipAddress);
   }

【问题讨论】:

    标签: c# unit-testing asp.net-core


    【解决方案1】:

    试试这个:

    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc;
    using Moq;
    using System.Net;
    using WebApplication.Api.Controllers;
    using Xunit;
    
    namespace WebApplication.Api.Tests
    {
        public class TestControllerTests
        {
            [Fact]
            public async void IpAdressResult()
            {
                var ipAddress = "192.168.1.123";
                var accessorMcok = new Mock<IHttpContextAccessor>();
                accessorMcok.Setup(a => a.HttpContext.Connection.RemoteIpAddress).Returns(IPAddress.Parse(ipAddress));
    
                var controller = new TestController(accessorMcok.Object);
    
                var result = (OkObjectResult)(await controller.GetTest());
                Assert.Equal(ipAddress, result.Value);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-11-27
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 2019-12-07
      • 2022-08-11
      • 2018-08-14
      相关资源
      最近更新 更多