2012-02-16 4 views
3

ASP.NET MVC 3 프로젝트에서 T4MVC를 사용하고 있습니다. 나는 다음과 같은 기본 검사를 :MvcContrib.TestHelper와 함께 T4MVC를 사용할 때 기본 뷰를 테스트하는 방법 AssertViewRendered

[TestMethod] 
public void IndexReturnsIndexView() 
{ 
    var controller = new HomeController(); 
    var result = controller.Index(); 

    result.AssertViewRendered().ForView(MVC.Home.Views.Index); 
} 

컨트롤러 방법은 기본보기를 반환하는 경우 테스트가 실패합니다 :

public virtual ActionResult Index() 
{ 
    return View(); 
} 

주어진 오류는 다음과 같습니다

MvcContrib.TestHelper.ActionResultAssertionException: Expected view name '~/Views/Home/Index.cshtml', actual was '' 

을하지만 테스트하면 통과 어떤 viewName을 반환할지 지정하려면 View을 무시합니다.

result.AssertViewRendered().ForView(MVC.Home.Index().GetT4MVCResult().Action); 

다음과 같은 오류가 발생 :

나는 아직도 행운을 다음과 같은 주장을 사용했지만,

MvcContrib.TestHelper.ActionResultAssertionException: Expected view name 'Index', actual was '' 

그때 내가 주장 실패를 잘못 해석했던 것을 깨달았다, 그래서 나는 변경 테스트 :

result.AssertViewRendered().ForView(String.Empty); 

테스트는 통과하지만 테스트 자체는 쓸모없는 것처럼 보입니다.

모든 뷰를 이름으로 지정하지 않으려 고합니다. 어떻게 테스트 할 수 있습니까? 명확히하기 위해, 오늘 NuGet에서 설치 한 MvcContrib.Mvc3.TestHelper-ci 3.0.96.0을 사용하고 있습니다.

UPDATE는

이 질문에 대한 답변 아니지만,이 테스트 케이스로 더 많은 가치를 제공하는 대신 다음과 같은 일을 시작했다 : 나는이 열기를 왼쪽

using (var controller = new FeatureController(mockGateway)) 
{ 
    // Act 
    var result = controller.Index(); 
    var model = result.ViewData.Model as MyModel; 

    // Assert 
    Assert.IsNotNull(model, "Model is null or wrong type"); 
    result.AssertViewRendered().WithViewData<MyModel>(); 

    // Alternative Assert for model data 
    Assert.IsTrue(model.Items.Count > 0); 
} 

답변

0

을 그들이 선택한 경우 다른 사람들이 대답 할 수 있도록 상당한 시간이 소요됩니다. 나는 이제 이것으로 스스로 대답 할 것이다.

다음보기는 반환 된보기가 예상 모델을 포함하고 더 적절하게 해당 모델 내의 데이터를 포함하는지 확인합니다. 이것은 문제의 컨트롤러에 대해 훨씬 더 나은 단위 테스트입니다.

using (var controller = new FeatureController(mockGateway)) 
{ 
    // Act 
    var result = controller.Index(); 
    var model = result.ViewData.Model as MyModel; 

    // Assert 
    Assert.IsNotNull(model, "Model is null or wrong type"); 
    result.AssertViewRendered().WithViewData<MyModel>(); 

    // Alternative Assert for model data 
    Assert.IsTrue(model.Items.Count > 0); 
} 
0

AssertViewRendered(). ForView()는 명시 적으로 View()에 전달한 뷰 이름에 대한 테스트가 컨트롤러 동작입니다. 만약 당신이하고있는 것처럼, 액션에 뷰 이름을 지정하지 않으면, .ForView()는 빈 문자열에 대해 테스트 할 것입니다.

View ("Index")를 호출 한 경우; 당신의 행동에서 당신은 테스트에서 .ForView ("Index")를 부를 수 있습니다.

나는이 주장이 당신의 행동이 다른 가능한 관점을 돌려 줄 수 있다면 가장 유용하다고 생각할 것이다.

관련 문제