如何对ASP MVC应用程序的视图进行单元测试?
我已经尝试过mvc contrib test helper ...
_controller.Index().AssertViewRendered();
但这实际上并没有测试视图。
例如,我可以愉快地在视图中插入一些伪造的代码,并获得可怕的死亡黄色屏幕,而我的单元测试不知道它。有没有任何确定的方法呢?我需要模拟视图引擎吗? mvccontrib是否迎合了这个?
我原本以为这是一个非常普遍的要求,但我找不到太多关于它的信息!
由于
修改 我真正追求的是编译时间检查,以确保模型更改不会影响视图。
这个问题包含了启用构建时间视图编译的说明,这对我来说已经足够了。 Compile Views in ASP.NET MVC
答案 0 :(得分:13)
有3种选择:
答案 1 :(得分:3)
可以使用Visual Studio测试工具通过单元测试测试您的视图,但只能控制器创建的值(例如ViewBag中的值:ViewBag.message = "My message."
)或渲染视图的名称:
[TestMethod]
public void MyActionTest()
{
// Arrange
var lController = new HomeController();
// Act
var lResult = lController.MyAction() as ViewResult;
// Assert
Assert.IsTrue(lResult.ViewBag.message == "My message.", "Wrong Message in Viewbag.");
Assert.IsTrue(lResult.ViewName == "MyView", "Incorrect view.");
}
如果您想自动测试包含HTML的整个视图,我建议Selenium IDE作为快速简单的解决方案,Selenium Web Driver用于跨浏览器测试和专家。
答案 2 :(得分:2)
如果您需要自动化测试,您应该查看MS测试套件中的Web测试工具或其他一些Web测试工具(如Selenium)来测试视图。我认为你会发现它比调整单元测试框架更容易。
完全披露:我仍然手工测试我的UI。我没有找到足够的好处来超过学习,设置和维护网络测试的成本。
答案 3 :(得分:2)
单元测试通常不会测试用户界面,因为它只是太脆弱。
虽然您可能会认为最小测试是在我们尝试渲染时,View不会因异常而崩溃,但这也是我们实际可以为View编写的唯一单元测试(ASP.NET MVC,WPF,Windows Forms等 - 它并不重要。)
您(或您的客户)要测试的下一件事是View正确呈现,并且您无法通过自动化测试可靠地执行此操作。这一切归结为视图更好地通过目视检查进行测试,因为投资回报就好比尝试开发和维护自动化UI测试更好。 / p>
答案 4 :(得分:0)
我的建议是不要费心去广泛测试你的观点。这很难,而且如果你做得对,无论如何都不会有太多的逻辑。
那就是说,WatiN是自动浏览器测试的好工具 - 不完全是你想要的,但效果很好。
答案 5 :(得分:0)
在ASP.NET MVC页面中测试视图相当容易。
I walk you through step-by-step in a YouTube video。以下是所需步骤的概述:
您需要在控制器中创建单元测试。这允许轻松调用渲染结果。例如:
public ActionResult TestScenario()
{
// setup some models
return View("Page", model);
}
您的单元测试需要调用该ControllerAction,并验证结果。 在ApprovalTests中,这将是:
MvcApprovals.VerifyMvcPage(new MyController().TestScenario);
这在ApprovalTests(www.approvaltests.com或nuget)中非常简单。