2010-02-22 72 views
19

我怎样才能测试一个ASP MVC应用程序的视图?单元测试asp mvc视图

我已经尝试了MVC的contrib测试帮手......

_controller.Index().AssertViewRendered(); 

但这并不实际测试的看法。

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

有没有建立这样做的方法?我需要模拟视图引擎吗? mvccontrib迎合这个吗?

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

感谢

编辑 我是真的什么之后,编译时间检查,以确保模型的变化不会影响视图。

这个问题包含了启用编译时间视图编译的说明,这对我来说已经足够了。 Compile Views in ASP.NET MVC

+0

我刚刚发现这个链接http://devermind.com/aspnet/aspnet-mvc-tip-turn-on-compile-time-view-checking/,我会很高兴,我不是很看测试任何逻辑,只是为了确保任何模型更改不会影响我的观点。不幸的是,它在作为游戏网站的工作中被阻止。所以我得等到我回家看看吧! – 2010-02-22 22:35:56

回答

13

有3种选择:

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

你能否详述点3? – 2010-02-22 22:39:23

+1

点赞3 :) – 2010-02-22 22:58:52

+0

我同意这一点。如果你正在测试一个视图是否被渲染,你就进入了不受你影响的测试代码领域。如果你有任何逻辑,无论多么微不足道,它都属于ViewModel。现在你应该能够轻松地进行测试。 – 2013-05-01 20:41:32

2

您应该看看MS Test套件中的Web测试工具或其他Web测试工具之一,如Selenium以测试视图,如果您需要对这些视图进行自动测试。我认为你会发现比修改单元测试框架更容易。

完全披露:我仍然手工测试我的UI。我没有找到足够的好处来弥补学习,设置和维护Web测试的成本。

0

我的建议是不打扰广泛测试您的意见。这很难,如果你正在做的事情,反正他们不会有太多的逻辑。

也就是说,WatiN是自动浏览器测试的好工具 - 不完全是你想要的,但它运行良好。

2

单元测试通常不会测试用户界面,因为它太简单了太脆要这样做。

尽管你可能会争辩说minum测试会是当我们试图渲染它时,View并没有崩溃,但这也将是我们实际上可以为View(ASP)编写的唯一单元测试。 NET MVC,WPF,Windows Forms等 - 它并不重要)。

您(或您的客户)想要测试的下一件事是视图呈现正确,并且无法通过自动化测试可靠地进行此操作。这一切归结到的是,视觉检测更好地测试视图,因为投资回报在这上面,比试图开发和维护自动UI测试更好。

0

在ASP.NET MVC页面中测试视图相当简单。

I walk you through step-by-step in a YouTube video。下面是所需的步骤概述:

  1. 您需要在控制器创建单元测试。这允许轻松调用渲染结果。例如:

    public ActionResult TestScenario() 
    { 
        // setup some models 
        return View("Page", model); 
    } 
    
  2. 你的单元测试需要调用ControllerAction,并验证结果。 在ApprovalTests这将是:

    MvcApprovals.VerifyMvcPage(new MyController().TestScenario); 
    

    这是ApprovalTests都是相当直截了当(www.approvaltests.com或的NuGet)。

+1

ASP.NET MVC测试的文档在哪里? – 2012-10-11 01:43:18

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."); 
} 

如果你想自动测试整个视图inclunding HTML,我建议Selenium IDE跨浏览器测试和专家为快速和简单的解决方案和Selenium Web Driver