Chris Pietschmann

husband, father, hacker, entrepreneur, futurist, innovator, autodidact

NAVIGATION - SEARCH

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 serverVariables = 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 serverVariables[x];
        });
 
    var httpContext = (new Moq.Mock<HttpContextBase>());
    httpContext.Setup(x => x.Request).Returns(httpRequest.Object);
 
    return httpContext.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.

blog comments powered by Disqus