views:

52

answers:

3

I'm using C#4.0 and i need to unit test a service. The function inside the service returns a path similar to the variable i called expected, this is the path i'm expecting to get back. But when i run this test i'm getting the error that HttpContext.Current is NULL. What can i do to fix this issue so the test can be ran?

[TestMethod]
public void GetPathTest()
{
   var expected = System.IO.Path.GetFullPath(HttpContext.Current.Server.MapPath("~/Certificates/"));
   var path = _mockService.Setup(o => o.GetPath()).Returns(expected);
}
+1  A: 

You can try looking at the attributes created for ASP.Net unit testing, like

[HostType("ASP.NET")]

This link to MSDN has quite a good write-up about it

Darksider
+1  A: 

At the moment I can't find my full wrapper for HttpContext that I used earlier, but at the moment we simply create a context for an empty request and go from there, like this:

SimpleWorkerRequest request = new SimpleWorkerRequest("","","", null, new StringWriter());
HttpContext context = new HttpContext(request);

Then in the unit test initialize or in the unit test itself (before you create expected) you can set the current HttpContext as follows:

HttpContext.Current = context;

Then simply flesh out the fake context and possible fake sessionstate, etc as required.

(Edit: This is all in VS2008, framework 3.5 by the way).

Anton
Thanks for the response! This did it, though i modified the simpleworkerrequest a little by adding the right path and adresses.
Rob
A: 

Hi - I'm posting this for reference. It's not an easy solution, and talks about Duck Typing (if it quacks..):

http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx

http://haacked.com/archive/2007/09/09/ihttpcontext-and-other-interfaces-for-your-duck-typing-benefit.aspx

It's relevant and worth a read; because there's no IHttpContext it's not possible to create a test environment implementation - until you consider using the Duck Typing library here. Though this is not a direct answer.

Hope that helps.

Kieren Johnstone