单元测试MVC3 Razor助手/没有字符串的视图

Eri*_*k T 9 testing unit-testing viewengine razor asp.net-mvc-3

我正在尝试MVC3 Razor视图引擎,我正在探索的功能之一就是能够对视图进行单元测试.

我已经看到了许多示例,其中Razor视图可以编译为程序集并呈现为字符串.问题是它呈现为一个字符串,所以我留下了字符串搜索!

这是我想要做的.

  1. 创建一个Razor助手
  2. 编译助手
  3. 运行编译好的帮助程序,传入ViewModel
  4. 获取帮助程序的输出作为某种HTML/XML /树结构

我想这样做的原因是我可以测试输出的特定部分.帮助程序可能会吐出包含各种输出块的HTML.我想要做的是查看是否有一个具有特定值的复选框(例如).如果您已经看过Selenium测试,它与我想要做的类似,除了不是服务器驱动的测试.

有没有办法让编译的Razor(或其他视图引擎)视图发出除字符串以外的东西?

Mil*_*ric 4

简而言之,答案是否定的,因为视图引擎的目的就是吐出字符串。将这些字符串解析为 XML 文档是一种赋予它们一定结构的方法,就像 @Craig-M 所建议的那样。但你必须问自己的是你真正测试的是什么。如果您的视图编译并生成某种 HTML,则它生成的内容可能会出现三个问题:

  • 它显示的数据不正确。您将在控制器级别对此进行测试,因此您可以在视图测试期间忽略它。
  • MVC 框架出现错误,生成了错误的 HTML 字符串。您不必担心这一点,因为 MVC 有自己的测试套件,并且由于关注点分离,这不是您的问题。
  • HTML 破坏了用户界面。

最后一个测试非常好,但为什么不在 javascript 单元测试中测试它呢?查看流行的 javascript 单元测试套件,如 JsUnit、FireUnit、QUnit 等。它们在解析 Razor 输出方面都会比您做得更好。

我认为分配给复选框的值可能会在控制器测试中进行测试。但要使用您的示例,测试复选框的值可以是 $('#theCheck').val() == 'the value'。您可以针对使用依赖项注入存储库或服务运行的网站运行这些内容,以控制“值”等内容。

只是一个想法。