2013-09-25 12 views
20

mam kod w kontrolerze, który zużywa HttpContextJak Mock HttpContext.User.Identity.Name w ASP.NET MVC 4

public ActionResult Index() 
{ 

    var currentUser=HttpContext.User.Identity.Name; 
    ...... 

} 

Starając się pisać testu przy użyciu NUnit jak ten

[Test] 
public void CanDisplayRequest() 
{ 
    //Act 
    var result= (ViewResult)_requestController.Index(); 

    //Assert 
    Assert.IsInstanceOf<OrderRequest>(resut.Model); 
} 

test nie powiedzie się, ponieważ nie można znaleźć HttpContext

Więc jak mogę kpić HttpContext.Current.User.Identity.Name

Używam Moq dla wyśmianie

Odpowiedz

41

można zainicjować kontroler z fałszywym kontekście z fałszywymi zleceniodawcy, jak pokazano poniżej

 var fakeHttpContext = new Mock<HttpContextBase>(); 
     var fakeIdentity = new GenericIdentity("User"); 
     var principal = new GenericPrincipal(fakeIdentity, null); 

     fakeHttpContext.Setup(t => t.User).Returns(principal); 
     var controllerContext = new Mock<ControllerContext>(); 
     controllerContext.Setup(t => t.HttpContext).Returns(fakeHttpContext.Object);   

     _requestController = new RequestController(); 

     //Set your controller ControllerContext with fake context 
     _requestController.ControllerContext = controllerContext.Object; 
+1

Czy macie również fragment o robi to samo, ale używa Microsft podróbki/test i nie ma żadnej innej struktury testowania stron trzecich? –

Powiązane problemy