C# 您是否可以在不需要集成测试的情况下单独测试razor视图?
我有一个MVC网站,有许多不同的步骤,用户必须通过它。有验证检查和定时部分(用于法律要求)。每次我需要测试一个页面的小改动时,都要做一个集成测试,这真是一件令人头痛的事。理想情况下,我想知道是否有一种方法(可能是插件?)允许我右键单击视图,以某种方式指定一个伪模型对象并直接打开它C# 您是否可以在不需要集成测试的情况下单独测试razor视图?,c#,unit-testing,asp.net-mvc-4,razor,integration-testing,C#,Unit Testing,Asp.net Mvc 4,Razor,Integration Testing,我有一个MVC网站,有许多不同的步骤,用户必须通过它。有验证检查和定时部分(用于法律要求)。每次我需要测试一个页面的小改动时,都要做一个集成测试,这真是一件令人头痛的事。理想情况下,我想知道是否有一种方法(可能是插件?)允许我右键单击视图,以某种方式指定一个伪模型对象并直接打开它 我最终想要测试的是任何新的客户端脚本(结合了razor/javascript/jQuery)在各种浏览器上的外观和工作方式。这不是关于测试我的控制器的功能。测试web应用程序是一个相当大的主题,但让我们保持简单: 要正
我最终想要测试的是任何新的客户端脚本(结合了razor/javascript/jQuery)在各种浏览器上的外观和工作方式。这不是关于测试我的控制器的功能。测试web应用程序是一个相当大的主题,但让我们保持简单: 要正确测试应用程序,必须以某种方式设计应用程序
- 所有业务逻辑都可以通过正常的单元测试进行测试
- 所有数据访问都可以抽象和模拟
- 数据访问可以单独进行集成测试
设计时间数据 设计时数据通常在WPF中使用,这里有一篇文章描述了在MVC中显示设计时数据的技术: 这将为您提供一种“以某种方式指定一个伪模型对象并直接打开它”的方法 这可能就是你想要的,或者: 卷曲 可与上述实时或设计时数据一起使用 我使用从批处理文件执行并将内容输出到多个文件 例如,此批处理可能会模拟登录: Logon.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
call Logon.bat > logon_result.txt
RunAll.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
call Logon.bat > logon_result.txt
第一次运行它时,我也会在浏览器中手动查看页面,然后我知道我可以将这些批处理结果文件(例如logon\u result.txt
)提交为预期输出
以后运行批处理文件时,任何更改都会在修订控制中突出显示。在这一点上,我检查差异,或者确定它们,然后作为新的预期输出提交。或者我修复一个bug
我通常将其用于WebAPI集成测试,但它应该适用于任何http服务的页面。需要记住的一个特定场景是,例如,对于对共享布局的全面更改,您可能不希望手动检查所有更改。因此,请确保在布局更改之前检查并提交了所有内容,这样小错误就不会隐藏在大量更改中
我用这项技术发现了一些坏虫子。是否曾经将System.Web.Mvc.AuthorizeAttribute
放在ApiController
而不是System.Web.Http.AuthorizeAttribute
上?不会阻止未经授权的用户,但代码看起来不错
作为
RunAll.bat
文件的第一项任务,您可能还需要设置一个新的干净数据库或恢复其中一个数据库的快照,以便页面上显示的任何数据在每次运行时都是相同的,不会显示为更改。谢谢您的回答。问题是我已经对我的服务器端代码进行了单元测试,效果很好。这更多的是关于客户端功能,它混合了Razor语法和Javascript/jQuery,因此我需要这些技术的特定功能。您的设计时数据更接近我想要的,但这是一种相当混乱的方法。我希望有比这更自动化的东西。所以我增加了一笔赏金,看看有没有人知道更多。谢谢