2012-04-28 2 views
0

배경 : MVC4를 사용하고 청구/승인에 WIF를 사용하고 있습니다. 우리는 Mockup Objects에 Moq/MvcContrib를 사용하고 있습니다. 나는 here을 보았고 MockIdentity와 MockPrincipal 객체를 만들었습니다 - 필요합니까?.Net MVC 앱의 단위 테스트 클레임

목표 : '관리자'소유권 주장이있는 사용자 만 작업에 액세스 할 수있는 클래스 수준 속성이있는 컨트롤러 클래스가 있습니다. 모의 사용자를 만들고 '관리자'클레임이없는 사람이 해당 작업에 액세스 할 수 있는지 테스트합니다.

나는 모의 개념을 얻지 만 데이터 객체를 조롱하고 내가해야 할 일을 수행하기 위해 필요한 플러그인/클래스/메소드/설정을 알아내는 데 어려움을 겪고있다.

미리 감사드립니다.

+0

왜 당신이 테스트 것인가? MVC 자체의 인프라 만 검증하면됩니다. 왜 그게 귀하의 애플 리케이션에 가치가 있습니까? MVC가 아닌 논리가 Manager 주장의 영향을 받았다면 다른 것입니다. 그런 다음 유닛 테스트가 의미가 있고 주체를 조롱하는 등의 작업이 필요할 것입니다 (예 : IPrincipal.IsInRole()을 호출하는 경우). –

답변

2

모의 사용자를 만들고 '관리자'클레임이없는 사용자가 작업에 액세스 할 수 있는지 테스트하고 싶습니다.

아니요. filterContext.Result을 올바로 설정 한 작성한 특성에 사용자를 전달하기 만하면됩니다. 그게 전부 야. System.Web.Mvc가 작동하는지 테스트 할 필요는 없습니다. 테스트중인 단일 장치!

아마도 귀하의 속성은 AuthorizeAttribute일까요? 따라서 OnAuthorization(AuthorizationContext)을 테스트해야합니다.

면책 조항 : 나는 한 동안 MOQ를 사용하지 않은,하지만 코드는 아마도 일반적으로 다음과 같이 보일 것이다 :

var user = new Mock<IPrincipal>(); 
user.Setup(/* whatever you need to look at */); 

var authContext = new Mock<AuthorizationContext>(); 
authContext.Setup(ac => ac.HttpContext.User).Returns(user); 

var myAttribute = new RequireManagerAttribute(); 
myAttribute.OnAuthorization(authContext); 

authContext.VerifySet(ac => ac.Result = /* whatever you expect */); 
+0

감사합니다. 나는 그것을 시도하고 다시보고 할 것입니다 ... SO 샘플을보고 제발 OP가 왜 그가하고있는 일을하는지 말해 주시겠습니까? 또한 언제 MvcContrib이 필요합니까? – Pete

+0

MvcContrib은 완전히 초기화 된 컨트롤러를 구축하는 데 도움을줍니다. 이 경우 속성을 테스트하는 중이므로 필요하지 않습니다. Roles.AddUserToRole과 같은 정적 메서드를 사용하면 그 사람이하는 일에 대해서 단위 테스트가 정말 어렵습니다. 그들을 피하지 않는 또 다른 이유. – bhamlin

관련 문제