2012-01-31 3 views
1

내 양식 인증이 권한없는 요청을 올바르게 리디렉션하는지 여부를 확인하는 MSpec 테스트가 있습니다. 그러나 보호 조치에 대한 테스트 호출은 인증에 걸리지 않고 곧바로 처리됩니다. 내가 읽은 바로는 사람이 대개 [인증] 태그를 사용하여 동작을 테스트하기 위해 가짜 인증을해야하므로 보호 된 동작 방법으로 바로가는 방법을 이해할 수 없습니다.MVC MSpec 테스트가 [Authorize] 속성을 사용하지 않음

누구나 도움을 주시면 큰 호응을 얻으실 수 있습니다. 이것이 MSpec을 사용하는 첫 번째 시도이며 실제로 유용해야하는 것처럼 보입니다. 작동하도록 설정할 수 없습니다.

컨트롤러 :

[Authorize] 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View("Index", null); 
    } 
} 

테스트 :

[Subject("Login and Authentication")] 
public class when_protected_page_invoked 
{ 
    private static HomeController homeController; 
    private static SecurityController securityController; 
    private static ActionResult result; 

    private Establish context =() => 
    { 
     homeController = new HomeController(); 
     securityController = new SecurityController(new SecurityService(new NHibernateRepository<User>(), new NHibernateRepository<Session>())); 
    }; 

    private Because of =() => result = homeController.Index(); 

    private It should_redirect_to_securityController =() => 
     { 
      result.ShouldBeARedirectToRoute().And().ControllerName().ShouldEqual("Security"); 
     }; 
} 

나는 그것이 ViewResult 반환되고 있음을 예외와 함께 실패 순간에 테스트를 실행, 그리고 디버깅 경우 단지를 반환 때 Home.Index() 결과입니다.

+0

인덱스 작업을 디버깅하는 경우 User.Identity.IsAuthenticated는 무엇을 반환합니까? 아마도 MSpec은 백그라운드에서 이것을 true로 설정하고 있습니다. –

+0

HttpContext : null 사용자 : null – mckjerral

+0

[이 질문에] (http://stackoverflow.com/questions/669175/unit-testing-asp-net-mvc-authorize-attribute- to-verify-redirect-to-login-page)에 대해서도 똑같은 문제가 있지만 NUnit을 사용하면 Authorize가 라우팅 수준에서 시작되어 컨트롤러에 직접 호출하여 도달 할 수 없음을 알 수 있습니다. 이것은 의미가 있지만, 내가 본 비트와 동의하는 것은 인증을 위조해야한다고 말합니다. – mckjerral

답변

3

그건 정상입니다. 액션 필터는이 경우 실행되지 않습니다. 당신이하는 일은 당신의 단위 테스트에서 액션 메소드를 호출하는 것뿐입니다. 단위 테스트하는 적절한 방법이이 컨트롤러는 권한 부여 속성 장식되어 있는지 확인한다 :

Assert.IsTrue(typeof(HomeController).GetCustomAttributes(typeof(AuthorizeAttribute), true).Any()); 

사용자 인 경우 제어기는 권한 부여 속성 장식 때 적절한 로그인 페이지로 리디렉션 사실 authneticated되지 않습니다 뭔가 당신이 단위 테스트를해야합니다. 이것은 ASP.NET MVC 프레임 워크에서 Microsoft가 이미 광범위하게 테스트 한 단위입니다.

+0

조치 필터는 실행되지 않는 유일한 속성입니까? Ninject의'[Inject]'속성이 MSpec 테스트의 일부로 실행될 수 있습니까? – Greg

+0

@Greg, 아니요, 실행되지 않습니다. –

관련 문제