2008-11-26 4 views

Répondre

4

Il vous suffit de créer une nouvelle instance de FormCollection et d'y ajouter les données.

Vous pouvez donc appeler quelque chose comme ça sans vous moquer de rien.

var result = controller.Create(new FormCollection { { "InvoiceId", "-1" } }) as RedirectToRouteResult; 

Sinon, si votre code appelle quelque chose comme demande ou HttpContext vous pouvez utiliser la méthode d'extension suivante (inspiré de Scott Hanselman example)

J'utilise RhinoMocks.

public static HttpContextBase SetHttpContext(this MockRepository mocks, Controller controller, HttpCookieCollection cookies) { 
cookies = cookies ?? new HttpCookieCollection(); 

var request = mocks.StrictMock<HttpRequestBase>(); 
var context = mocks.StrictMock<HttpContextBase>(); 
var response = mocks.StrictMock<HttpResponseBase>(); 

SetupResult.For(context.Request).Return(request); 
SetupResult.For(context.Response).Return(response); 
SetupResult.For(request.Cookies).Return(cookies); 
SetupResult.For(request.IsSecureConnection).Return(false); 
SetupResult.For(response.Cookies).Return(cookies); 

if (controller != null) 
{ 
    controller.ControllerContext = new ControllerContext(context, new RouteData(), controller); 
} 

if (!string.IsNullOrEmpty(requestUrl)) 
{ 
    request.SetupRequestUrl(requestUrl); 
    SetupResult.For(response.ApplyAppPathModifier(null)).IgnoreArguments().Return(null); 
} 

return context; 
}