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: <pre class="csharpcode">public HttpContextBase CreateMockHttpContext()
{
var serverVariables = new NameValueCollection {
{ "SomeServerIPAddress", "127.0.0.1" },
{ "AnotherAppVariable", "Unit Test Value" }
};
var httpRequest = <span class="kwrd">new</span> Moq.Mock<HttpRequestBase>();
httpRequest.Setup(x => x.ServerVariables.Get(It.IsAny<<span class="kwrd">string</span>>()))
.Returns<<span class="kwrd">string</span>>(x =>
{
<span class="kwrd">return</span> serverVariables[x];
});
var httpContext = (<span class="kwrd">new</span> Moq.Mock<HttpContextBase>());
httpContext.Setup(x => x.Request).Returns(httpRequest.Object);
<span class="kwrd">return</span> httpContext.Object; }</pre>
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.