15

我有一个 MVC 网站,用户必须采取许多不同的步骤才能通过它。有验证检查和定时部分(用于法律要求)。每次我需要测试对页面的小改动时都必须进行集成测试,这真是令人头疼。理想情况下,我想知道是否有一种方法(可能是插件?)可以让我右键单击视图,以某种方式指定一个假模型对象并直接打开它?

我最终要测试的是任何新的客户端脚本(结合了razor/javascript/jQuery)在各种浏览器上的外观和工作方式。这不是关于测试我的控制器的功能。

4

2 回答 2

4

设计时数据

设计时数据在 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 服务页面。要记住的一个特定场景是,例如,对于共享布局的全面更改,您可能不想手动检查它们。因此,请确保在布局更改之前检查并提交所有内容,这样小错误就不会隐藏在大量更改中。

我用这种技术发现了一些不好的错误。曾经把 aSystem.Web.Mvc.AuthorizeAttribute放在 aApiController而不是 a 上System.Web.Http.AuthorizeAttribute?不会阻止未经授权的用户,但代码看起来不错。

您可能还希望设置一个新的干净数据库或恢复一个快照作为RunAll.bat文件的第一个任务,以便页面上显示的任何数据每次运行都相同,并且不会显示为更改。

于 2013-09-24T13:03:53.303 回答
2

测试 Web 应用程序是一个相当大的话题,但让我们保持简单:

要正确测试您的应用程序,您必须以某种方式设计应用程序

  • 所有业务逻辑都可以通过正常的单元测试进行测试
  • 所有数据访问都可以抽象和模拟
  • 数据访问可以单独进行集成测试

如果您有一个 MVC 网站,您通常应该将所有业务逻辑与任何 UI 分开。这实际上应该使您能够使用标准的单元测试项目来测试 80% 的代码。当然,您必须编写大量代码才能正确测试它...

如果您的视图中有大量的业务逻辑,这将导致非常难以测试代码。唯一的方法(我知道)是自动化 UI 测试。为此,有一些有用的框架可用,Visual Studio 也提供了一些自动化测试的工具。

一般来说,它是这样工作的,您定义通常作为用户在 Web 浏览器中执行的操作。用户可能会执行的所有操作都可以通过编写脚本来测试。要做到这一点,很大程度上取决于你的用户界面实际上有多复杂和/或动态。你拥有的东西越多,编写测试脚本就越难......

以下是一些关于自动化测试的精彩文章: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

于 2013-09-22T17:00:15.067 回答