单元测试确定Action返回正确的View

时间:2011-06-28 20:04:44

标签: c# .net asp.net-mvc unit-testing asp.net-mvc-3

如何测试你喜欢的动作方法会返回正确的视图,因为Viewname是一个空字符串?我是否应该费心去测试呢?我不确定要做多少单元测试,我想你可以创建很多单元测试!

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


[TestMethod]
public void DetermineIndexReturnsCorrectView()
{
     HomeController controller = new HomeController();

     ViewResult result = controller.Index() as ViewResult;

     //****result.ViewName is empty!!!!***//
     Assert.AreEqual("Index", result.ViewName);
}

5 个答案:

答案 0 :(得分:6)

看看MvcContrib Testhelpers。那里也有很好的例子

答案 1 :(得分:6)

测试结果的类型。

//Act
var result = controller.Create();

//Assert
Assert.IsInstanceOfType(result, typeof(ViewResult));

然后为RedirectToRouteResult案例编写单独的测试并处理异常情况并进行设置。

答案 2 :(得分:6)

在您的控制器操作中,您没有指定视图名称,因此它是一个空字符串。在这种情况下,MVC将视图名称与操作名称相同。

  

我是否应该费心去测试?

你一定要测试一下。

Assert.AreEqual(string.Empty, result.ViewName);

  

我不确定要进行多少单元测试   操作

尽可能多的人。想想这是一项可以为您节省大量时间的投资。

答案 3 :(得分:2)

MvcContrib TestHelpers代码的示例类似于

var result = _testController.Details("ref").AssertViewRendered().ForView("TestDetails");

这测试_testController Details方法返回视图“TestDetails”

答案 4 :(得分:2)

如果你有像

这样的观点
public ActionResult Index()
{
    return View();
}

ViewName属性将采用默认值""。您需要指定ViewName之类的

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

解决它。