2013-06-25 2 views
0

나는 이미 this을 읽었으며 해결책을 시도했지만 나에게 도움이되지 못했습니다. 나는 이것을 이해하려고 노력하고 있으며, 아마도 이것을 제대로 테스트하지는 않을 것입니다. ModelState를 테스트 할 컨트롤러의 라인에 NullReferenceException이 표시됩니다. 내 테스트 스위트로 NUnit MVC 3 사용하고 있습니다. ShouldBeViewNamed("Index")은 필자가 돌아 오는 뷰의 이름을 테스트하기 위해 작성한 확장 메서드이지만 코드를 실행할 때까지는 그렇게까지 가지 않습니다. 나는이 "그냥 작동"해야 읽은 대부분의 블로그에 따르면단위 테스트를 실행할 때 ModelState가 null 인 이유는 무엇입니까?

[TestFixture] 
public class TestControllerTest 
{ 
    [Test] 
    public void TestingModelState() 
    { 
     // Arrange 
     var model = new TestModel(); 
     var controller = new TestController(); 
     // Arbitrary values to indicate an error in the model 
     controller.ModelState.AddModelError("tester1", "error happened"); 

     // Act 
     var result = controller.Index(model); 

     // Assert 
     result.ShouldBeViewNamed("Index"); 
    } 
} 

:

public class TestController : Controller 
{ 
    [HttpPost] 
    public ViewResult Index(TestModel model) 
    { 
     if(ModelState.IsValid) // results in a null reference exception. 
      return View(); 

     return new ViewResult(); 
    } 
} 

및 테스트 클래스 : 여기 내 컨트롤러입니다. 그러나 내가하는 일에 상관없이 ModelState는 항상 null입니다.이 작업이 다른 사람에게 효과적이라면 내 로컬 설정이나 우리가 사용하는 프레임 워크와 관련이 있다고 가정합니다. 나는 다른 개발자에게 내 가게에서 이것을 테스트 해 보았고 같은 예외를 얻는다.

EDIT :이 특정 프로젝트와 관련하여 문제가 좁혀졌습니다. 새로운 프로젝트를 솔루션에 추가하고 동일한 테스트를 통해이 문제를 복제 할 수 없습니다. 말할 필요도없이 이것은 2009 년에 MVC 1 프로젝트로 시작되어 MVC 3으로 업그레이드 된 상속 된 프로젝트입니다. 다음 프로젝트 레벨 설정을 살펴 보겠습니다.

EDIT : 우리가 잠시 동안 고용 한 컨설턴트가 MVC 4로 프로젝트를 업그레이드하려고 시도했고, 어떤 문제가 발생하지 않았으며, 파일을 되돌릴 수 없었습니다. 대부분의 단위 테스트는 여전히 통과되었고 프로젝트는 잘 돌아 갔지만 NUnit 프로젝트는 MVC 4에 대한 나쁜 참조를 가지고있었습니다. 수동으로 .csproj 파일에서 참조를 삭제하고 VS에서 readd를 실행해야했습니다.

답변

2

NUnit 프로젝트가 MVC 프로젝트와 동일한 버전의 System.Web.Mvc.dll을 참조하는지 확인하십시오.

+0

당신은 저를 때렸습니다. 저는 문자 그대로 약 10 분 전에이를 발견했으며 귀하의 게시물을 볼 때 답변을 작성했습니다. – akousmata

+0

나는 이것에 대한 해결책을 찾기 위해 하루를 잃어 버렸다. 이 답변에 감사드립니다. – elector

관련 문제