您是否可以在不需要集成测试的情况下自行测试剃刀视图
本文关键字:情况下 测试 视图 剃刀 集成测试 是否 不需要 | 更新日期: 2023-09-27 18:31:09
我有一个MVC网站,用户必须采取许多不同的步骤才能完成它。有验证检查和定时部分(针对法律要求)。每次我需要测试对页面的微小更改时都必须进行集成测试,这真的很令人头疼。理想情况下,我想知道是否有一种方法(也许是一个插件?)允许我右键单击视图,以某种方式指定一个假模型对象并直接打开它?
我最终要测试的是任何新的客户端脚本(结合了razor/javascript/jQuery)在各种浏览器上的外观和工作方式。这不是关于测试我的控制器的功能。
设计时数据
设计时数据通常用于 WPF,这里有一篇文章介绍了在 MVC 中显示设计时数据的技术:
http://blog.dezfowler.com/2010/11/adding-design-mode-to-your-mvc-app.html
这应该为您提供一种"以某种方式指定假模型对象并直接打开它"的方法。
这可能就是你所追求的,或者:
卷曲
可以与上述实时或设计时数据一起使用。
我使用从批处理文件执行的 cURL 并将内容输出到多个文件。
例如,此批处理可能会模拟登录:
登录.bat:
echo Index without logon
curl http://localhost/index.html
echo Logon
curl http://localhost/login.html --data "username=a&password=p" ---dump-header auth.txt
echo Index after logon
curl http://localhost/index.html --cookie auth.txt
RunAll.bat:
call Logon.bat > logon_result.txt
第一次运行它时,我还在浏览器中手动查看页面,然后我知道我可以将这些批处理结果文件(例如logon_result.txt
)提交为预期的输出。
随后我运行批处理文件时,任何更改都会在修订控制中突出显示。此时,我查看差异并确定它们,并提交为新的预期输出。或者我修复了一个错误。
我通常将其用于 WebAPI 集成测试,但它应该适用于任何 http 服务的页面。要记住的一个特定场景是,例如,对于对共享布局的全面更改,您可能不希望手动检查它们。因此,请确保在布局更改之前检查并提交所有内容,然后小错误不会隐藏在大量更改中。
我用这项技术发现了一些坏错误。曾经把System.Web.Mvc.AuthorizeAttribute
放在ApiController
而不是System.Web.Http.AuthorizeAttribute
上吗?不会阻止未经授权的用户,但代码看起来不错。
您可能还希望设置一个新的清理数据库或还原一个数据库的快照作为RunAll.bat
文件的第一个任务,以便页面上显示的任何数据每次运行都相同,并且不会显示为更改。
测试 Web 应用程序是一个非常大的主题,但让我们保持简单:
若要正确测试应用程序,必须以某种方式设计应用程序
- 所有业务逻辑都可以通过正常的单元测试进行测试
- 所有数据访问都可以抽象和模拟
- 数据访问可以单独进行集成测试
如果你有一个 MVC 网站,你通常应该将所有业务逻辑与任何 UI 分开。这实际上应该使您能够使用标准单元测试项目来测试80%的代码。当然,您必须编写大量代码才能正确测试它...
如果您的视图中有大量的业务逻辑,这将导致很难测试代码。唯一的方法(我知道)是自动化的UI测试。为此,有一些有用的框架可用,Visual Studio还提供了一些工具来自动化测试。
通常,它的工作方式是这样的,您可以定义通常在Web浏览器中作为用户执行的操作。用户将执行的所有操作都可能通过编写脚本进行测试。为此,这在很大程度上取决于您的 UI 实际复杂程度和/或动态性。你拥有的东西越多,编写测试脚本就越困难......
以下是一些关于自动化测试的精彩文章:http://visualstudiomagazine.com/Articles/2012/12/01/Automated-UI-Testing.aspx
http://blog.typemock.com/2012/05/22/automated-testing-of-asp-net-mvc-applications
以下是有关如何在VS2012中运行自动化UI测试的快速视频:http://channel9.msdn.com/Events/Visual-Studio/Visual-Studio-2012-Virtual-Launch/Automated-UI-testing-with-Visual-Studio-2012