是否有方法对视图中设置的ASP.NETMVCViewBag属性进行单元测试?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

假设我在页面顶部有以下代码的视图:

@{
    ViewBag.Title = "About Us";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

我有一个控制器方法:

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

如何测试ViewBag是否设置正确?

我试过以下代码。

[TestCase]
public void About()
{
    var controller = new AboutController();
    var ar = controller.About() as ViewResult;
    Assert.AreEqual("About Us", ar.ViewBag.Title);
}

但是,当我运行测试时,我得到了以下结果:

Tests.Controllers.AboutControllerTests.About():
    Expected: "About Us"
    But was: null
提问于
用户回答回答于

不,你不能像这样测试视图。可能最接近的是将视图渲染到流编写器中,然后测试生成的HTML。这不是通常在单元测试中完成的事情。我会建议你进行网络测试,以验证视图是否正确。可以使用Visual Studio创建Web测试,也可以使用免费的Selenium框架。

用户回答回答于

由于ViewData和ViewBag都使用相同的存储模式,因此应该可以ViewData[yourKey]在测试中使用。

所以你的测试看起来像这样:

[TestCase]
public void About()
{
    var controller = new AboutController();
    var ar = controller.About() as ViewResult;
    Assert.AreEqual("About Us", ar.ViewData["Title"]);
}

扫码关注云+社区