You could restructure your class a little to test it in a similar way. One way would be to add a constructor that accepts an HttpContextBase
:
public class Data
{
private HttpContextBase contextBase;
public Data(HttpContextBase context)
{
this.context = context;
}
public Data() : this(new HttpContextWrapper(HttpContext.Current))
{
}
public void GetData()
{
var user = this.context.User.Identity.Name
}
}
Then you could pass in your mocked HttpContextBase
during your unit test.
[TestMethod]
public void Test()
{
var fakeHttpContext = new Mock<HttpContextBase>();
var fake = new GenericIdentity("user");
var prin = new GenericPrincipal(fakeIdentity, null);
fakeHttpContext.Setup(t => t.User).Returns(prin);
var data = new Mock<Data>(fakeHttpContext.Object);
// Now you can successfully call data.GetData()
}