Reputation: 1995
I want to write a unit test to ensure that the view I am returning is the correct one.
My plan is to write a test that first invokes the controller and then calls the ActionResult method I plan to test I thought I could write something like
Controller controller = new HomeController();
var actionresult = controller.Index();
Assert.False(actionresult.ToString(), String.Empty);
which would then allow me to parse the actionresult for the test value.
However I cannot directly instantiate the public ActionResult Index()
method.
How do I do this?
Upvotes: 4
Views: 231
Reputation: 26169
Here's an example from Professional ASP.NET MVC 1.0 (book):
[TestMethod]
public void AboutReturnsAboutView()
{
HomeController controller = new HomeController();
ViewResult result = controller.About() as ViewResult;
Assert.AreEqual("About", result.ViewName);
}
Note that this will fail if you don't return an explicit view in your controller method, i.e. do this:
Return(View("About"));
not this:
Return(View());
Or the test won't pass. You should only need to do this if your method will ever return more than one view, otherwise you should return an implicit view anyway and not bother testing the framework.
Upvotes: 1
Reputation: 14272
The test helpers in MVCContrib will help you here.
ViewResult result = controller.Index().AssertViewRendered().ForView("Blah");
Upvotes: 4