【问题标题】:unit testing asp mvc view单元测试asp mvc视图
【发布时间】:2010-02-22 22:22:19
【问题描述】:

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

我已经尝试过 mvc contrib 测试助手...

 _controller.Index().AssertViewRendered();

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

例如,我可以很高兴地在视图中插入一些虚假代码,并获得可怕的黄屏死机,而我的单元测试却不知道它。

是否有任何已建立的方法可以做到这一点?我需要模拟视图引擎吗? mvccontrib 能满足这个要求吗?

我原以为这是一个非常普遍的要求,但我找不到太多关于它的信息!

谢谢

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

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

【问题讨论】:

  • 我刚刚找到了这个链接devermind.com/aspnet/…,我很高兴,我并不是真的想测试任何逻辑,只是为了确保任何模型更改都不会影响我的观点。不幸的是,它作为游戏网站在工作中被阻止了哈哈。所以我得等到我回家看看!

标签: c# asp.net asp.net-mvc unit-testing


【解决方案1】:

有 3 个选项:

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

【讨论】:

  • 我同意这一点。如果您正在测试视图是否被渲染,那么您正在进入不受您影响的测试代码领域。如果您有任何逻辑,无论多么微不足道,它都属于 ViewModel。现在您应该可以轻松测试了。
【解决方案2】:

可以使用 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 用于跨浏览器测试和专家。

【讨论】:

    【解决方案3】:

    单元测试通常从不测试 UI,因为它太脆弱无法这样做。

    虽然您可能会争辩说,当我们尝试渲染视图时,视图不会因异常而崩溃,但这也是我们实际上可以为视图编写的唯一单元测试(ASP.NET MVC、WPF、Windows 窗体等 - 并不重要)。

    您(或您的客户)想要测试的下一件事是视图是否正确呈现,而您无法通过自动化测试可靠地做到这一点。归根结底,Visual Inspection 可以更好地测试 View,因为其投资回报比尝试开发和维护自动化 UI 测试要好。

    【讨论】:

      【解决方案4】:

      如果您需要对这些视图进行自动化测试,您应该查看 MS 测试套件中的 Web 测试工具或许多其他 Web 测试工具之一,例如 Selenium 来测试视图。我认为您会发现它比调整单元测试框架更容易。

      完全披露:我仍然手动测试我的 UI。我没有发现足够的好处来超过学习、设置和维护网络测试的成本。

      【讨论】:

        【解决方案5】:

        我的建议是不要费心去广泛地测试你的观点。这很难,而且如果你做对了,那么它们无论如何也不会有太多逻辑。

        也就是说,WatiN 是一个很好的自动化浏览器测试工具 - 不是您想要的,但它运行良好。

        【讨论】:

          【解决方案6】:

          在 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)中非常简单。

          【讨论】:

          • ASP.NET MVC 测试的文档在哪里?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多