【问题标题】:How do I Unit Test the Output of a View in MonoRail?如何在 MonoRail 中对视图的输出进行单元测试?
【发布时间】:2010-11-27 03:11:36
【问题描述】:

我一直在尝试为 MonoRail 编写一些初始的 NUnit 单元测试,并且已经掌握了一些基础知识。但是,虽然我设法检查了控制器操作是否设置了 Flash["message"] 值,但 BaseControllerTest 类似乎根本没有存储视图的输出,所以无论我调用 RenderView 还是动作本身,没有任何内容被添加到 Response.OutputContent 数据中。 我还尝试调用 InPlaceRenderView 来尝试让它写入 StringWriter,而 StringWriter 似乎也没有得到任何回报——返回的 StringBuilder 也是空的。 我正在创建一个新的控制器实例,然后调用 PrepareController(controller,"","home","index");

到目前为止,BaseControllerTest 似乎导致任何输出都被放弃。我错过了什么吗?这应该工作吗?我不确定 100%,因为虽然我也在 Linux 上的 MonoDevelop 中运行这些单元测试,但 MonoRails 在那里工作正常。

【问题讨论】:

  • 您没有在测试上下文中设置视图引擎。根据您实际使用的 ViewEngine,您需要对其进行初始化并将其添加到测试上下文中。无论如何,我会重新考虑运行一直到视图的集成测试。这类测试往往非常脆弱,投资回报率低至负。确保将所有逻辑留在视图之外。
  • 我试图将逻辑排除在视图之外,并创建了一个我也想测试的 ViewComponent。我不希望对所有视图进行单元测试,但我想组合一个示例测试来演示如果我在正确获取特定页面时遇到问题,它是如何完成的。
  • 我暂时不尝试对视图进行单元测试 - 我有一种能够使用 Selenium 测试页面的解决方案,尽管只能通过 MonoDevelop 和 Selenium RC 的浏览器t 似乎也打得很好。我仍然需要有一种不同的方式来测试 ViewComponent - 从我读过的内容来看,这应该能够进行单元测试,但我仍然缺少任何示例代码来展示如何设置属性它等等

标签: unit-testing castle-monorail


【解决方案1】:

虽然我没有测试视图的理想方法,但当可以充分测试视图组件时,这可能不太重要。要测试站点本身的视图,我可以使用 Selenium。虽然理论上它可以成为 NUnit 测试套件的一部分,但在我的测试中,它并没有在 MonoDevelop 下成功运行(尽管 RC 交互式会话工作正常,但未能始终启动与 Selenium RC 的连接)。但是,Selenium 测试可以作为一组从 Firefox 运行,这还不错 - 使用 NUnit 进行单元测试,然后使用 Selenium 套件进行集成/系统测试脚本,并且该设置将在 Linux/MonoDevelop 设置中运行。

至于测试底层元素,您可以检查重定向并检查 flash 值集等,这一切都很好,并且对于测试 ViewComponents,部分模拟渲染确实以可访问的形式返回渲染输出,所以事实证明,它们更容易在 NUnit 中进行测试(使用 BaseViewComponentTest 的基本测试类),如下所示:

[测试]
公共无效 TestMenuComponentRendersOK()
{
   var mc = new MenuComponent();
   PrepareViewComponent(mc);
   var dict = new System.Collections.Specialized.ListDictionary();
   dict.Add("数据",getSampleMenuData());
   dict.Add("名称","testmenu");
   // 其他附加参数
   mc.RenderComponent(mc,dict);
   断言.IsTrue(this.Output.Contains("
  • "),"应该添加列表项"); }
  • 【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多