2009-11-18 7 views
0

내 단위 테스트에서 뷰 이름이없는 View()를 사용하여 컨트롤러 작업에서 돌아 오면 ViewResult.ViewName이 string.Empty로 설정된다는 것을 알았습니다. 이 값을 설정하려면 View() 호출에 대한 매개 변수로 지정해야합니다. 이 사람이 통과 할 동안왜 뷰 이름을 지정하지 않으면 단위 테스트가 실패합니까?

public class MyController : Controller 
{ 
    public ActionResult MyAction() 
    { 
     return View(); 
    } 
} 

:

public class MyController : Controller 
{ 
    public ActionResult MyAction() 
    { 
     return View("MyAction"); 
    } 
} 

나 '

[TextFixture] 
public class MyControllerTests 
{ 
    [Test] 
    public void TestMyAction() 
    { 
     var controller = new MyController(); 
     var result = controller.MyAction(); 

     Assert.AreEqual("MyAction", result.ViewName); 
    } 
} 

다음 동작 구현이 단위 테스트가 실패합니다 : 예를 들어, 다음 단위 테스트를 부여 NET 4.0에서 ASP.NET MVC 2 (pre-beta)를 사용하고 있습니다. 그러나 .NET 4.0과 관련된 것은 사용하지 않습니다. ViewName이 단위 테스트의 어설 션에서 확인할 수있는 신뢰할 수있는 속성 중 하나라고 생각했기 때문에이 동작이 이상하다고 생각합니다.

답변

3

이것은 ASP.NET MVC의 잘 알려진 "기능"입니다. Microsoft는 최초 버전 이후로 문서화했습니다 ...

명시 적보기 이름이 지정되지 않은 경우 프레임 워크는 규칙 ("Views \ controllername \ actionname"또는 "Shared \ controllername \ actionname"). ViewName은 해당 규칙에서 벗어나는 경우에만 관련이 있습니다. 그래서 단위 테스트는 잘못된 가정을합니다.

HTH.

+0

알 수 있습니다. 적절한 주장에 대해 추천 된 기사/게시물/무엇이 있나? – alastairs

+0

하나가 아닙니다. "asp.net mvc unit testing"과 같은 것으로 google하면이 문제를 다루는 수백 개의 기사/블로그 게시물을 얻을 수 있습니다. 정확히 테스트 할 대상에 따라 다릅니다. –

관련 문제