2009-02-06 4 views
3

나는 다음과 같은 HandleUnknownAction 내 기본 컨트롤러 클래스에 설정 한 :ASP.NET MVC 컨트롤러의 HandleUnknownAction()을 어떻게 테스트 할 수 있습니까?

protected override void HandleUnknownAction(string action) 
{ 
    Response.Redirect("/"); 
} 

가 어떻게 내가 단위 테스트가 있습니까? 또 다른 요점은 알 수없는 조치를 올바르게 처리하는 방법입니까? RedirectToAction() 호출이 더 정확하지만 HandleUnknownAction에 반환 값이없는 것 같습니다. (가) 지금까지 내가 그것을 테스트 얻을 수

은 다음과 같습니다

[Test] 
public void TestHandleUnknownAction() 
{ 
    ctroler.ActionInvoker.InvokeAction(ctroler.ControllerContext, "unknown"); 
} 

내가 그것에 붙어있어.

답변

3

컨트롤러에 작업이 없을 때 HandleUnknownAction이 호출된다는 테스트가 필요하다고 생각하지 않습니다. 우리는 그것을 처리하기위한 프레임 워크를 신뢰합니다. 그래서 조롱 프레임 워크 Moq으로 직접 HandleUnknownAction을 호출하여 구현을 테스트 할 수 있습니다. Rhino Mocks도 가능해야합니다. 간단한 Response.Redirect를하지만, 오류보기를 렌더링과 같은 더 복잡한 일을 수행하려는 경우 그 단위 테스트 코드가 작동하지 않습니다에 대한 괜찮

public class TestHelperController : RealController 
{ 
    public void InvokeUnknownAction(string action) 
    { 
     this.HandleUnknownAction(action); 
    } 
} 
+0

HandleUknownAction을 호출하는 것에 대한 요지가 있지만 그 모의 객체 마법은 무엇입니까? 이 물체가 어디에서 왔는가? Expect 함수가 내가 찾고있는 함수이다. –

+0

Moq을 잊었을 때, 죄송합니다. 답변을 링크로 업데이트했습니다. – Dala

+0

남자, 저 Moq 도서관 꿈이다, 너는 그것을 얻는다, 모든 명망은 너에 속한다! –

1

: TestHelperController가 액세스 할 HandleUnknownAction하게

public void TestHandleUnknownAction() 
{ 
    Mock<ControllerContext> cc = new Mock<ControllerContext> 
              (MockBehavior.Strict); 
    cc.Expect(c => c.HttpContext.Response.Redirect("/")); 

    TestHelperController controller = new TestHelperController(); 
    controller.ControllerContext = cc.Object; 

    controller.InvokeUnknownAction("test"); 
} 

:

// TODO - Put some stuff into ViewData or a model 
View("Error").ExecuteResult(Me.ControllerContext) 
관련 문제