Mocking HttpRequestBase.ServerVariables using Moq

Mocking is a very handy tool for unit testing code, especially when it comes to mocking the HttpContext for web application code. However, it’s not as straight forward as you might think to mock the HttpRequestBase.ServerVariables, however once you know what to do it really is pretty simple.

Here’s a code example, using moq, that shows how to create a mock HttpContextBase that contains a mock HttpRequestBase with a mock ServerVariables property:

public HttpContextBase CreateMockHttpContext()
{
    var serverVaraibles = new NameValueCollection {
        { "SomeServerIPAddress", "127.0.0.1" },
        { "AnotherAppVariable", "Unit Test Value" }
    };

    var httpRequest = new Moq.Mock<HttpRequestBase>();
    httpRequest.Setup(x => x.ServerVariables.Get(It.IsAny<string>()))
        .Returns(string>(x => {
            return serverVaraibles[x];
        }));

    var httpContext = (new Moq.Mock<HttpContextBase>());
    httpContext.Setup(x => x.Request).Returns(httpRequest.Object);
}

Hopefully this points someone in the direction they are looking to be able to write more unit tests for code that contains dependencies on the HttpContext.