【问题标题】:Unit Test to determine that Action is returning correct View单元测试以确定操作返回正确的视图
【发布时间】:2011-09-24 15:24:58
【问题描述】:

您如何测试您喜欢的操作方法是否会返回正确的视图,因为 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);
}

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      测试结果的类型。

      //Act
      var result = controller.Create();
      
      //Assert
      Assert.IsInstanceOfType(result, typeof(ViewResult));
      

      然后为 RedirectToRouteResult 案例编写单独的测试并同时处理异常案例,然后就可以了。

      【讨论】:

      • 并测试RouteValues的内容?
      • 对于重定向的情况是的,我通常会这样做...... Assert.That(result.RouteValues["action"], Is.EqualTo("Index"), "RedirectResult does not contain一个带有 Index 动作的路由值");
      【解决方案3】:

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

      我应该费心测试这个吗?

      您绝对应该对此进行测试。

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

      我不确定要进行多少单元测试 做...

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

      【讨论】:

      • 感谢@frennky 的回复。我正在使用 MVC4 并试图找出这个问题的原因。手动输入视图名称确认您的回答是正确的。
      • 单元测试会(总是)为您节省时间,这是一个过于天真的假设。研究不赞成这种说法rbcs-us.com/documents/Why-Most-Unit-Testing-is-Waste.pdf
      【解决方案4】:

      MvcContrib TestHelpers 代码的示例类似于

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

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

      【讨论】:

        【解决方案5】:

        如果你有这样的看法

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

        ViewName 属性将采用默认值 ""。你需要指定ViewNamelike

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

        解决它。

        【讨论】:

          猜你喜欢
          • 2012-10-29
          • 1970-01-01
          • 2015-01-31
          • 2012-02-10
          • 2014-01-18
          • 1970-01-01
          • 2018-02-25
          • 1970-01-01
          • 2016-03-25
          相关资源
          最近更新 更多