.NET Framework 4.0Beta2 로 작성된 application들은 NUnit에서 테스트가 불가능하다. NUnit는 .NET 2.x대의 base assembly만이 테스트가 가능하도록 작성되어 있기 때문이다.
그래서 MS의 xUnit test 를 이용해서 RouteData Test Code를 작성해보면 다음과 같다.
먼저, 가장 기본적인 RouteCollection을 생성하고, 테스트할 MVC application의 Route를 등록시킨다.
그리고 RouteCollection.GetRouteData(HttpBaseContext)를 이용해서 들어온 HttpBaseContext에 대한 RouteData를 확인한다.
문제는 HttpBaseContext를 생성하는 것인데. Mock을 이용하면 간단하게 해결 할 수 있다.
다음 코드는 Mock을 이용해서 HttpBaseContext를 생성하는 코드이다.
최종적으로 완성된 코드는 다음과 같다.
그래서 MS의 xUnit test 를 이용해서 RouteData Test Code를 작성해보면 다음과 같다.
먼저, 가장 기본적인 RouteCollection을 생성하고, 테스트할 MVC application의 Route를 등록시킨다.
그리고 RouteCollection.GetRouteData(HttpBaseContext)를 이용해서 들어온 HttpBaseContext에 대한 RouteData를 확인한다.
[TestMethod] public void TestMethod1() { RouteCollection routeConfig = new RouteCollection(); RouteApp.MvcApplication.RegisterRoutes(routeConfig); RouteData routeData = routeConfig.GetRouteData(HttpBaseContext); }
문제는 HttpBaseContext를 생성하는 것인데. Mock을 이용하면 간단하게 해결 할 수 있다.
다음 코드는 Mock을 이용해서 HttpBaseContext를 생성하는 코드이다.
private static MockMakeMockHttpContext(string url) { var mockHttpContext = new Mock (); var mockRequest = new Mock (); //HttpContext에 Request 설정 mockHttpContext.Setup(x => x.Request).Returns(mockRequest.Object); //HttpRequest의 relative url로 사용자 지정 url 설정 mockRequest.Setup(x => x.AppRelativeCurrentExecutionFilePath).Returns(url); var mockResponse = new Mock (); //HttpContext에 Response 설정 mockHttpContext.Setup(x => x.Response).Returns(mockResponse.Object); //HttpResponse에서 사용자 Url을 그냥 pass시키도록 ApplyAppPathModifier 수정 mockResponse.Setup(x => x.ApplyAppPathModifier(It.IsAny ())).Returns (x => x); return mockHttpContext; }
최종적으로 완성된 코드는 다음과 같다.
[TestMethod] public void TestMethod1() { RouteCollection routeConfig = new RouteCollection(); RouteApp.MvcApplication.RegisterRoutes(routeConfig); var mockHttpContext = MakeMockHttpContext("~/"); RouteData routeData = routeConfig.GetRouteData(mockHttpContext.Object); Assert.IsNotNull(routeData.Route); Console.WriteLine(routeData.Values.ToString()); }