2008-11-17 5 views
5

게시 할 때 사용자 항목을 삭제할 ASP.NET MVC 응용 프로그램에서 단위 테스트를 시도하고 있습니다. 이 페이지를 제한하여 해당 항목의 소유자 만 게시 할 수 있도록하고 싶습니다. 원래, 컨트롤러에 HttpContext.Current.User.Identity.Name이 항목의 소유자와 같은지 확인하는 빠른 체크를하고 싶었지만,이 테스트는 어렵다고 생각했습니다.어떻게 ASP.NET MVC에서 User.Identity.Name을 스텁링합니까?

현재 로그인 한 사용자 이름에 액세스 할 수있는 인터페이스를 만들어야합니까?

답변

4

질문의 마지막 줄은 아마도 가장 빠른 해결책이다, 그러나, 나는 당신이 HttpContext.Current.User 이미 IPrincipal하고 HttpContext.Current.User.Identity 이미 IIdentity 인 인터페이스를 만들 필요가 있다고 생각하지 않습니다.

당신의 검사 논리가 이러한 인터페이스 중 하나를 사용하는 경우

은, 컨트롤러는 당신이 도움이 HttpContext.Current.User.Identity

희망 대신하여 만드는 IIdentity 통과 조롱 할 수 있습니다!

2

Thread.CurrentPrincipal.Identity.Name을 사용합니다. 단위 테스트를 위해 GenericPrincipal을 생성하고 첨부하는 것은 간단합니다.

5

당신이 코드

Controller CreateControllerAs(string userName) { 

    var mock = new Mock<ControllerContext>(); 
    mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName); 
    mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true); 

    var controller = new SomeController(); 
    controller.ControllerContext = mock.Object; 

    return controller; 
} 

그것은

+0

LIB moq 사용을 사용할 수 있습니다 내가 모의 클래스를 찾을 수있는 당신은 알고 계십니까? 나는 그것에 대해 문서를 찾으려고 MSDN을 온통 보았지만 어떤 진전을 이루지 못했습니다. –

+1

https://code.google.com/p/moq/ 여기에서 lib가 사용되었습니다. – Sly

관련 문제