如何测试这个简单的控制器/视图?

时间:2009-12-09 03:32:13

标签: asp.net-mvc unit-testing

我在控制器中有一个非常简单的动作,它只返回一个只包含html的视图。


public class TestController : Controller
{
   public ActionResult Index()
   {
       return View();
   }
}

如何确保视图呈现没有错误?当我执行此操作时:


UsersController controller = new UsersController( );
ViewResult result = controller.Index( ) as ViewResult;
Assert.IsNotNull( result );

它通过但结果对象中的所有内容(即MasterName和ViewName)都是空的。 有没有办法测试这个?

2 个答案:

答案 0 :(得分:0)

如果要测试模板,则必须执行ExecuteResult的{​​{1}}。问题是ViewResult您必须传递给此方法。你必须嘲笑太多的东西。您可以在MvcContrib中查找测试助手。他们预制了一些嘲笑。

另一方面,这可能不是个好主意。在大多数情况下,最好通过集成测试来覆盖这些内容。即使对url的简单请求也可以确保模板成功编译。

答案 1 :(得分:0)

另一种选择是显式命名控制器返回的ActionResult,然后根据它进行测试..

public ActionResult Index()
{
   return View("Index");
}

UsersController controller = new UsersController( );
ViewResult result = controller.Index( ) as ViewResult;
Assert.IsNotNull( result );
Assert.AreEqual("Index", result.ViewName);

如果你的控制器中有很多重定向,或者你的控制器方法可以返回不同的视图,这可能很有用。 (通常控制器中应该没有太多逻辑,但有时候这样做是必要/更容易的。)