Skip to content

Instantly share code, notes, and snippets.

@rally25rs
Created January 8, 2012 15:16
Show Gist options
  • Save rally25rs/1578664 to your computer and use it in GitHub Desktop.
Save rally25rs/1578664 to your computer and use it in GitHub Desktop.
MSTest Assert Utility for MVC3 Controller Unit Testing
using System.Web.Mvc;
using Microsoft.VisualStudio.TestTools.UnitTesting;
/// <summary>
/// MSTest Asserts for unit testing MVC3 Controllers.
/// </summary>
public static class AssertMvc
{
public static T ResultIs<T>(object result)
where T : ActionResult
{
Assert.IsInstanceOfType(result, typeof(T));
return result as T;
}
public static ViewResult View(string expectedViewName, ActionResult result)
{
var viewResult = ResultIs<ViewResult>(result);
Assert.AreEqual(expectedViewName, viewResult.ViewName);
return viewResult;
}
public static ViewResult DefaultView(ActionResult result)
{
var viewResult = ResultIs<ViewResult>(result);
Assert.IsTrue(string.IsNullOrEmpty(viewResult.ViewName));
Assert.IsNull(viewResult.View);
return viewResult;
}
public static PartialViewResult DefaultPartialView(ActionResult result)
{
var viewResult = ResultIs<PartialViewResult>(result);
Assert.IsTrue(string.IsNullOrEmpty(viewResult.ViewName));
Assert.IsNull(viewResult.View);
return viewResult;
}
public static ViewResult DefaultViewOr(string expectedViewName, ActionResult result)
{
var viewResult = ResultIs<ViewResult>(result);
Assert.IsTrue(string.IsNullOrEmpty(viewResult.ViewName) || viewResult.ViewName == expectedViewName);
return viewResult;
}
public static void ModelIsNull(ActionResult result)
{
var viewResult = ResultIs<ViewResultBase>(result);
Assert.IsNull(viewResult.Model);
}
public static T ModelIsInstanceOfType<T>(ActionResult result)
{
var viewResult = ResultIs<ViewResultBase>(result);
Assert.IsInstanceOfType(viewResult.Model, typeof(T));
return (T)viewResult.Model;
}
public static void RedirectsToAction(string expectedAction, ActionResult result)
{
var redirectResult = ResultIs<RedirectToRouteResult>(result);
Assert.AreEqual(expectedAction, redirectResult.RouteValues["action"]);
}
public static void RedirectsToAction(string expectedAction, string expectedController, ActionResult result)
{
var redirectResult = ResultIs<RedirectToRouteResult>(result);
Assert.AreEqual(expectedController, redirectResult.RouteValues["controller"]);
Assert.AreEqual(expectedAction, redirectResult.RouteValues["action"]);
}
public static void RedirectsTo(string expectedUrl, ActionResult result)
{
var redirectResult = ResultIs<RedirectResult>(result);
Assert.AreEqual(expectedUrl, redirectResult.Url);
}
}
@rally25rs
Copy link
Author

Sample Usage:

    [TestMethod]
    public void GetLogOn_ReturnsDefaultViewAndModel()
    {
        var controller = new LogOnController();
        var result = controller.LogOn();

        AssertMvc.DefaultView(result);
        AssertMvc.ModelIsInstanceOfType<LogOnModel>(result);
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment