Sto provando a eseguire alcuni test sulla mia applicazione MVC ma ho avuto un mondo di difficoltà a farlo funzionare. Cercherò di arrivare subito al punto:Come simulare o falsificare HttpApplication/HttpContext per i test
sto usando RhinoMocks per provare qualcosa di simile:
Setup:
MockRepository mocks = new MockRepository();
HttpContextBase _mockContext = mocks.FakeHttpContext();
mocks.SetFakeControllerContext(new LoginController());
HttpApplicationStateBase appState = MockRepository.GenerateStub<HttpApplicationStateBase>();
_mockContext.Expect(mc => mc.Application).Return(appState);
HttpContext.Current = _mockContext.ApplicationInstance.Context;
Ecco il metodo FakeHttpContext()
:
public static HttpContextBase FakeHttpContext(this MockRepository mocks)
{
HttpApplication app = mocks.PartialMock<HttpApplication>();
HttpContextBase context = mocks.PartialMock<HttpContextBase>();
HttpRequestBase request = mocks.PartialMock<HttpRequestBase>();
HttpResponseBase response = mocks.PartialMock<HttpResponseBase>();
HttpSessionStateBase session = mocks.PartialMock<HttpSessionStateBase>();
HttpServerUtilityBase server = mocks.PartialMock<HttpServerUtilityBase>();
SetupResult.For(context.ApplicationInstance).Return(app);
SetupResult.For(context.Request).Return(request);
SetupResult.For(context.Response).Return(response);
SetupResult.For(context.Session).Return(session);
SetupResult.For(context.Server).Return(server);
mocks.Replay(context);
return context;
}
Devo davvero accedere a HttpContextBase.Request.AppRelativeCurrentExecutionFilePath
ma viene sempre restituito come null
. Lo stesso vale per HttpContext.Current.Request.RequestContext
.
Qualcuno può aiutarmi qui? È sicuro di dire che sono disperato a questo punto.
È non dire qual è il problema? Hai un errore (quale?)? Per quanto posso vedere, l'impostazione specifica 'Setup (c => c.Request.AppRelativeCurrentExecutionFilePath) 'dovrebbe funzionare perché' Request' è una proprietà 'virtuale' di un tipo che ha a sua volta una proprietà' virtuale' 'AppRelativeCurrentExecutionFilePath'. Qual è la tua ragione per dire '_mockContext.SetupAllProperties();'? Che vuoi che siano impostate anche * altre * proprietà? –
@JeppeStigNielsen Ho aggiornato la mia domanda con quello che sto usando ora. Non riesco ancora a farlo funzionare. – Kehlan