How to unit-test an MVC controller action which depends on authentication in c#?

后端 未结 2 466
小蘑菇
小蘑菇 2020-12-04 13:36

I\'d like to write (in c#) a unit-test for an MVC controller action which might return one view or the other, depending on whether the request is authenticated. How can this

2条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-04 14:11

    You can mock your Request. Something like this (Moq using):

    var request = new Mock();
    request.SetupGet(x => x.IsAuthenticated).Returns(true); // or false
    
    var context = new Mock();
    context.SetupGet(x => x.Request).Returns(request.Object);
    
    var controller = new YourController();
    controller.ControllerContext = 
           new ControllerContext(context.Object, new RouteData(), controller);
    
    // test
    
    ViewResult viewResult = (ViewResult)controller.SomeAction();
    
    Assert.True(viewResult.ViewName == "ViewForAuthenticatedRequest");
    

提交回复
热议问题