单元测试asp mvc视图

Pau*_*sey 20 c# asp.net asp.net-mvc unit-testing

我如何单元测试ASP MVC应用程序的视图?

我试过mvc contrib test helper ...

 _controller.Index().AssertViewRendered();
Run Code Online (Sandbox Code Playgroud)

但这实际上并没有测试视图.

例如,我可以愉快地在视图中插入一些伪造的代码,并获得可怕的黄色死亡屏幕,而我的单元测试不知道它.

这有什么建立的方法吗?我需要模拟视图引擎吗?mvccontrib是否迎合了这一点?

我本来以为这是一个非常普遍的要求,但我找不到太多关于它的东西!

谢谢

编辑 我真正追求的是编译时间检查,以确保模型更改不会影响视图.

这个问题包含了启用构建时间视图编译的说明,这对我来说已经足够了.在ASP.NET MVC中编译视图

Pac*_*aco 16

有3种选择:

  1. 您希望对视图中的代码进行单元测试.在这种情况下,您必须将代码移动到控制器,因为视图的责任不是拥有此代码.
  2. 您希望确保视图实际显示在浏览器中.使用浏览器UI测试工具,如waitin或selenium.这不会创建视图的独立测试,而是创建应用程序的大部分.这听起来像是一个优势,但在视图的孤立测试中是否有任何价值?
  3. 您想测试视图中的代码是可编译的代码.然后编译代码.这可以在单元测试中完成,方法是手动调用view.compile或在构建过程中打开视图编译器.


Sim*_*mon 5

可以使用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.");
}
Run Code Online (Sandbox Code Playgroud)

如果要自动测试包括HTML在内的整个视图,我建议使用Selenium IDE作为快速,简单的解决方案,并建议Selenium Web Driver用于跨浏览器测试和专家。