MSTest:注销的单元测试HttpContext.SignoutAsync



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

var mockHttpContext = new Mock<HttpContext>();

//设置控制器HttpContext

_controller.ControllerContext.HttpContext = mockHttpContext.Object;

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

如果深入到SigOutAsync代码的定义,则需要不应为null的Authentication Service Provider。因此,除了模拟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

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

也可以参考这里-如何对HttpContext.SignInAsync((进行单元测试?

最新更新