Jim*_*Jim 19 unit-testing asp.net-mvc-3
假设我在页面顶部有一个包含以下代码的视图:
@{
ViewBag.Title = "About Us";
Layout = "~/Views/Shared/_Layout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)
我有一个控制器方法:
public ActionResult About()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
如何测试ViewBag设置是否正确?
我试过以下代码.
[TestCase]
public void About()
{
var controller = new AboutController();
var ar = controller.About() as ViewResult;
Assert.AreEqual("About Us", ar.ViewBag.Title);
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行测试时,我得到以下结果:
Tests.Controllers.AboutControllerTests.About():
Expected: "About Us"
But was: null
Run Code Online (Sandbox Code Playgroud)
Phi*_*ler 56
由于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"]);
}
Run Code Online (Sandbox Code Playgroud)
Gig*_*apr 19
你有没有尝试过
Assert.AreEqual("About Us", controller.ViewBag.Title);
Run Code Online (Sandbox Code Playgroud)
这个对我有用
控制器返回的ViewResult只有对应显示的视图的引用.此时甚至没有解决该视图.那里的代码永远不会被您的测试执行.
您应该做的是在控制器中设置ViewBag属性,而不是视图.通常,视图只会读取这些值.
希望能帮助到你
不,您不能像这样测试视图。您可能得到的最接近的方法是将视图呈现到流编写器中,然后测试生成的 HTML。这不是单元测试中常见的事情。我建议您执行 Web 测试以验证视图是否正确。您可以使用Visual Studio创建 Web 测试,也可以使用免费的Selenium框架。
| 归档时间: |
|
| 查看次数: |
15577 次 |
| 最近记录: |