9

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

我见过很多例子,其中 Razor 视图可以编译成程序集并呈现成字符串。问题是它呈现为字符串,所以我只能进行字符串搜索!

这是我想要做的。

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

我想这样做的原因是我可以测试输出的特定部分。助手可能会吐出包含各种输出垃圾的 HTML。我想要做的是看看是否有一个具有特定值的复选框(例如)。如果您看过 Selenium 测试,它与我想做的类似,但不是作为服务器驱动的测试。

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

4

4 回答 4

4

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

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

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

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

只是一个想法。

于 2011-02-17T22:32:10.470 回答
1

您可以解决此问题的一种方法是将 html 字符串解析为 XDocument 并让您的程序集返回它。然后,您可以在测试中使用 LINQ 对其进行查询。

编辑:我也在试图找出一个 Razor 测试策略。我很想知道你是如何让助手工作的。到目前为止,我在将它们呈现为 MVC 框架之外的字符串方面还处于空白状态。

于 2011-02-16T16:49:37.890 回答
1

如何将您的视图呈现为 html,然后将该 html 发送到HtmlAgility库?这样您就可以轻松地遍历/导航您的 html。我认为 MVC 本身没有任何方法可以做到这一点。

于 2011-03-08T22:21:10.873 回答
0

看起来微软对如何从视图生成 HTML 有自己的答案,以进行单元测试

于 2012-05-01T15:20:44.597 回答