2011-08-17 48 views
3

我有一個模擬Querystring的情況。 有沒有人用RhinoMocks嘲笑Querystring,如果有的話請讓我知道。我使用MVC 3嘲笑Querystring-RhinoMocks-MVC3

謝謝

+1

取決於你如何處理控制器中的查詢字符串。你會發布你的控制器嗎? –

+0

http://stackoverflow.com/questions/677801/mocking-and-httpcontextbase-get-user –

回答

4

我發現基於http://dylanbeattie.blogspot.com/2008/12/mocking-querystring-collection-in.html一個解決方案,但使用RhinoMocks

HttpContextBase httpContextBase;  
HttpRequestBase httpRequestBase; 
ControllerBase controllerBase; 

controllerBase = mockRepository.DynamicMock<ControllerBase>(); 

NameValueCollection nvc = new NameValueCollection(); 
nvc.Add("KEY", "VALUE"); 

httpRequestBase = mockRepository.DynamicMock<HttpRequestBase>(); 
Expect.Call(httpRequestBase.QueryString).Return(nvc); 

httpContextBase = mockRepository.DynamicMock<HttpContextBase>(); 
Expect.Call(httpContextBase.Request).Return(httpRequestBase); 

var context = new ControllerContext(httpContextBase, new RouteData(), controllerBase); 

yourController.ControllerContext = context; 
+0

這真的很酷...謝謝 –

1

雖然你問RhinoMocks,我發現這個解決方案,並適應它起訂量。因此,對於任何感興趣的人,這裏是@ TomAx的答案的Moq版本:

 NameValueCollection queryString = new NameValueCollection(); 
     queryString.Add("KEY", "VALUE"); 

     // Set up a request 
     var request = new Mock<HttpRequestBase>(); 
     request.Setup(r => r.QueryString).Returns(queryString); 

     // Inject into the controller 
     var controllerBase = new Mock<ControllerBase>(); 
     var contextBase = new Mock<HttpContextBase>(); 
     contextBase.Setup(c => c.Request).Returns(request.Object); 

     request.Setup(r => r.QueryString).Returns(queryString); 
     var controllerContext = new ControllerContext(contextBase.Object, new RouteData(), controllerBase.Object); 
     var controller = new YourController(); 
     controller.ControllerContext = controllerContext; 
+0

必須有一個更短的方式。 –

+0

@ByteBlast如果你找到更短的方法,請在這裏發佈。 – ashes999

+1

根據你的回答(謝謝)和其他一些人,我想出了這個幫手,他的身材略矮一些:https://gist.github.com/ByteBlast/8fbbb425bc60f582780e –