I am currently using Moq to write automated tests for System.Web.HttpApplication
in C#:
public FakeHttpApplication CreateBaseMocks()
{
MockContext = new Mock<HttpContextBase>();
MockRequest = new Mock<HttpRequestBase>();
MockResponse = new Mock<HttpResponseBase>();
MockSession = new Mock<HttpSessionStateBase>();
MockServer = new Mock<HttpServerUtilityBase>();
MockContext.Setup(ctx => ctx.Request).Returns(MockRequest.Object);
MockContext.Setup(ctx => ctx.Response).Returns(MockResponse.Object);
MockContext.Setup(ctx => ctx.Session).Returns(MockSession.Object);
MockContext.Setup(ctx => ctx.Server).Returns(MockServer.Object);
HttpContextBase = MockContext.Object;
HttpRequestBase = MockRequest.Object;
HttpResponseBase = MockResponse.Object;
MockRequest.Setup(r => r.Headers).Returns(new NameValueCollection());
return this;
}
public FakeHttpApplication SetupNormalRequestValues()
{
//Context.User
MockUser = new Mock<IPrincipal>();
MockIdentity = new Mock<IIdentity>();
MockContext.Setup(context => context.User).Returns(MockUser.Object);
MockUser.Setup(context => context.Identity).Returns(MockIdentity.Object);
//Request
MockRequest.Setup(request => request.InputStream).Returns(new MemoryStream());
//Response
MockResponse.Setup(response => response.OutputStream).Returns(new MemoryStream());
return this;
}
However, setting up the objects this way leaves a lot to be desired considering that most of the internal objects and properties remain null
. Does anyone know of a better way to do this? I am looking for a way to instantiate a more lifelike HttpApplication
object and don't mind a little complexity.