잊지 않겠습니다.

'test code'에 해당되는 글 1건

  1. 2010.01.06 ASP .NET MVC RouteData Test Code
.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를 확인한다.


1.[TestMethod]
2.public void TestMethod1()
3.{
4.    RouteCollection routeConfig = new RouteCollection();
5.    RouteApp.MvcApplication.RegisterRoutes(routeConfig);   
6.    RouteData routeData = routeConfig.GetRouteData(HttpBaseContext);
7.}


문제는 HttpBaseContext를 생성하는 것인데. Mock을 이용하면 간단하게 해결 할 수 있다.
다음 코드는 Mock을 이용해서 HttpBaseContext를 생성하는 코드이다.


01.private static Mock<httpcontextbase> MakeMockHttpContext(string url)
02.{
03.    var mockHttpContext = new Mock<httpcontextbase>();
04. 
05.    var mockRequest = new Mock<httprequestbase>();
06.    //HttpContext에 Request 설정
07.    mockHttpContext.Setup(x => x.Request).Returns(mockRequest.Object);
08.    //HttpRequest의 relative url로 사용자 지정 url 설정
09.    mockRequest.Setup(x => x.AppRelativeCurrentExecutionFilePath).Returns(url);
10. 
11.    var mockResponse = new Mock<httpresponsebase>();
12.    //HttpContext에 Response 설정
13.    mockHttpContext.Setup(x => x.Response).Returns(mockResponse.Object);
14.    //HttpResponse에서 사용자 Url을 그냥 pass시키도록 ApplyAppPathModifier 수정
15.    mockResponse.Setup(x => x.ApplyAppPathModifier(It.IsAny<string>())).Returns<string>(x => x);           
16. 
17.    return mockHttpContext;
18.}
19.</string></string></httpresponsebase></httprequestbase></httpcontextbase></httpcontextbase>


최종적으로 완성된 코드는 다음과 같다.

01.[TestMethod]
02.public void TestMethod1()
03.{
04.    RouteCollection routeConfig = new RouteCollection();
05.    RouteApp.MvcApplication.RegisterRoutes(routeConfig);
06. 
07.    var mockHttpContext = MakeMockHttpContext("~/");
08.    RouteData routeData = routeConfig.GetRouteData(mockHttpContext.Object);
09. 
10.    Assert.IsNotNull(routeData.Route);           
11.    Console.WriteLine(routeData.Values.ToString());
12.}
Posted by Y2K
,