【问题标题】:MSTest: Unit Testing HttpContext.SignoutAsync for the logoutMSTest:用于注销的单元测试 HttpContext.SignoutAsync
【发布时间】:2022-02-18 12:10:53
【问题描述】:

在单元测试注销功能时简单地将 Mock HttpContext 传递给控制器​​上下文将引发以下错误 HttpContext.Signout + 值不能为空(参数'provider')

var mockHttpContext = new Mock<HttpContext>();

       

//设置控制器HttpContext

_controller.ControllerContext.HttpContext = mockHttpContext.Object;

// 现在调用注销操作方法和测试结果

【问题讨论】:

    标签: mstest httpcontext


    【解决方案1】:

    如果您深入到 SigOutAsync 代码的定义,它期望 Authentication Service Provider 不应为 null 。 因此,除了模拟 HttpContext 之外,您还需要模拟将解决问题的服务提供者。

           //mock the Http Context along with Service provider
            var mockHttpContext = new Mock<HttpContext>();
            var authServiceMock = new Mock<IAuthenticationService>();
            authServiceMock.Setup(_ => _.SignOutAsync(It.IsAny<HttpContext>(), It.IsAny<string>(),It.IsAny<AuthenticationProperties>())).Returns(Task.FromResult((object)null));
            var serviceProviderMock = new Mock<IServiceProvider>();
            serviceProviderMock.Setup(_ => _.GetService(typeof(IAuthenticationService)))
                .Returns(authServiceMock.Object);
            mockHttpContext.Setup(x => x.RequestServices)
              .Returns(serviceProviderMock.Object);
    
            //set the controller HttpContext
            _controller.ControllerContext.HttpContext = mockHttpContext.Object;
           // Now call the Logout and Test
    

    在测试登录功能时可以应用类似的逻辑

    也可以参考这里-How to unit test HttpContext.SignInAsync()?

    【讨论】:

      猜你喜欢
      • 2021-04-27
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多