Unable to test with mock HttpContextBase in .Net
Posted: Sun Sep 22, 2013 1:54 am
Hi Guys,
I am testing out the cloud service but running into problems trying to write a few unit / integration tests. Error is: "Object reference not set to an instance of an object". Below is my code, any ideas what needs to be set in HttpContextBase for the request to work? And why doesn't the cloud API have a method where you can only send in the user agent string like the stand-alone API does? Would make it a lot easier to write tests...
[TestMethod]
public void TestGalaxyTab()
{
string ua = "Mozilla/5.0 (Linux; U; Android 4.1.2; nb-no; GT-N8000 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30";
var context = FakeHttpContext(ua);
var config = new DefaultCloudClientConfig
{
ApiKey = "xxxxxx:.........."
};
var manager = new CloudClientManager(config);
var info = manager.GetDeviceInfo(context);
...
}
public static HttpContextBase FakeHttpContext(string userAgent)
{
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>();
var session = new Mock<HttpSessionStateBase>();
var server = new Mock<HttpServerUtilityBase>();
var cookies = new HttpCookieCollection();
var items = new ListDictionary();
request.Setup(r => r.Cookies).Returns(cookies);
response.Setup(r => r.Cookies).Returns(cookies);
context.Setup(ctx => ctx.Items).Returns(items);
context.SetupGet(ctx => ctx.Request).Returns(request.Object);
context.SetupGet(ctx => ctx.Response).Returns(response.Object);
context.SetupGet(ctx => ctx.Session).Returns(session.Object);
context.SetupGet(ctx => ctx.Server).Returns(server.Object);
request.Setup(r => r.UserAgent).Returns(userAgent);
return context.Object;
}
Thanks,
Frank
I am testing out the cloud service but running into problems trying to write a few unit / integration tests. Error is: "Object reference not set to an instance of an object". Below is my code, any ideas what needs to be set in HttpContextBase for the request to work? And why doesn't the cloud API have a method where you can only send in the user agent string like the stand-alone API does? Would make it a lot easier to write tests...
[TestMethod]
public void TestGalaxyTab()
{
string ua = "Mozilla/5.0 (Linux; U; Android 4.1.2; nb-no; GT-N8000 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30";
var context = FakeHttpContext(ua);
var config = new DefaultCloudClientConfig
{
ApiKey = "xxxxxx:.........."
};
var manager = new CloudClientManager(config);
var info = manager.GetDeviceInfo(context);
...
}
public static HttpContextBase FakeHttpContext(string userAgent)
{
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>();
var session = new Mock<HttpSessionStateBase>();
var server = new Mock<HttpServerUtilityBase>();
var cookies = new HttpCookieCollection();
var items = new ListDictionary();
request.Setup(r => r.Cookies).Returns(cookies);
response.Setup(r => r.Cookies).Returns(cookies);
context.Setup(ctx => ctx.Items).Returns(items);
context.SetupGet(ctx => ctx.Request).Returns(request.Object);
context.SetupGet(ctx => ctx.Response).Returns(response.Object);
context.SetupGet(ctx => ctx.Session).Returns(session.Object);
context.SetupGet(ctx => ctx.Server).Returns(server.Object);
request.Setup(r => r.UserAgent).Returns(userAgent);
return context.Object;
}
Thanks,
Frank