2013-03-25 1 views
1

약간 새로운 단위 테스트이며 Visual Studio 2012에서 Moq 및 MSTest를 사용하여 내 응용 프로그램 중 하나의 메서드에 대한 테스트를 만들려고합니다. 응용 프로그램은 정상적으로 작동하지만, 내 테스트를 실행할 때, 나는 다음에 null 참조 예외를 받고 있어요 :웹 API RouteUrl이 테스트에서 null 예외를 반환합니다.

var fooURL = Url.RouteUrl("MyApi", new { httproute = string.Empty, controller = "MyController", id = id }, Request.Url.Scheme); 

내가 읽고 ASP.NET MVC: Unit testing controllers that use UrlHelper 주위에 내 머리를 포장하려했지만, 이러한 우려로 표시 url 자체 테스트. 나는 내 기능에서 나중에 오는 것을 시험하는 것에 더 관심이있다.

위 링크에 언급 된 설정이 너무 작아서 테스트가 제대로 작동하지 않습니까? 아니면 잘못된 방향으로보고 있습니까?

+0

null이 정확히 무엇입니까? 그것은'Request' 또는'Request.Url' 또는'Request.Url.Scheme'입니까? – ashes999

+0

불행히도, 나는 그것을 결정하는 방법을 모르겠습니다. 오류 메시지가 나타납니다. System.NullReferenceException : 개체 참조가 개체의 인스턴스로 설정되어 있지 않습니다. StackTrace를 두 번 클릭하면 위의 줄에 나타납니다. –

+0

문제 없습니다. TestDriven.NET을 다운로드하십시오. 테스트에 중단 점을 설정하십시오. 마우스 오른쪽 버튼을 클릭하고 Test With, Debugger라고 말하십시오. 변수를 검사하거나'Watch '를 사용하여 알아 내십시오. – ashes999

답변

0

귀하의 의견에 따르면 Request이 (가) null 인 것으로 보입니다. 나는 how to mock out the request에 대한 인터넷 검색을 권장합니다.

저는 개인적으로 Ninject/Moq을 좋아합니다. 사용하기 쉽고 강력한 조합입니다. 당신은 같은 것을 수행 할 수 있습니다

  • 당신이
  • 사용해서 Ninject는 Global.asax에의 응용 프로그램 시작에 생산 응용 프로그램을 (바인딩 (단지 Url 속성이 경우) 조롱 할 필요가 무엇과 IHttpRequest 인터페이스 만들기 실제 요청 (Kernal.Bind<IHttpRequest>().To(HttpRequest)) 테스트의 경우
  • 는, 기본 테스트 클래스 또는 대신 모의 클래스에 결합하는 글로벌 테스트 실행 클래스 (또는 new Mock<IHttpRequest>() 인스턴스)

당신을 가지고 이벤트) 너의 inte을 만들어야 할지도 모른다. 실제 HttpRequest 클래스의 필수 메소드/서명을 복사하십시오. 그래도 작동하지 않으면 인터페이스를 구현하는 래퍼 클래스를 만들고 실제 HttpRequest 인스턴스에 호출을 위임해야합니다.

+0

이것이 실제로 효과가 있습니까? – ashes999

+0

null 값을 던지는 것이 무엇인지 알아내는 것. 내 검색을 구체화 할 수 있다는 것이 나를 테스트하는 데 도움이되었습니다. –

관련 문제