Current Solution
So I have something very similar to
[HttpPost]
public ActionResult Upload()
{
var length = Request.ContentLength;
var bytes = new byte[length];
if (Request.Files != null )
{
if (Request.Files.Count > 0)
{
var successJson1 = new {success = true};
return Json(successJson1, "text/html");
}
}
...
return Json(successJson2,"text/html");
}
Unit testable solution?
I want something like this:
[HttpPost]
public ActionResult Upload(HttpRequestBase request)
{
var length = request.ContentLength;
var bytes = new byte[length];
if (request.Files != null )
{
if (request.Files.Count > 0)
{
var successJson1 = new {success = true};
return Json(successJson1);
}
}
return Json(failJson1);
}
However this fails, which is annoying as I could make a Mock from the base class and use it.
Notes
- I am aware this is not a good way to parse a form/upload and would
like to say other things are going on here (namely that this upload
can be a form or an xmlhttprequest – the action does not know which). - Other ways to make “Request” unit testable would also be awesome.
You already have a Request property on your controller => you don’t need to pass it as action argument.
Now you can mock the
Requestin your unit test and more specifically the HttpContext which has a Request property: