0

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

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

4

1 回答 1

0

虽然我没有测试视图的理想方法,但当可以充分测试视图组件时,这可能不太重要。要测试站点本身的视图,我可以使用 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("
  • "),"列表项应该已经添加"); }
  • 于 2010-11-29T02:46:56.937 回答