我在控制器中有一个非常简单的动作,它只返回一个只包含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)都是空的。 有没有办法测试这个?
答案 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);
如果你的控制器中有很多重定向,或者你的控制器方法可以返回不同的视图,这可能很有用。 (通常控制器中应该没有太多逻辑,但有时候这样做是必要/更容易的。)