Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何在MonoRail中对视图的输出进行单元测试?_Unit Testing_Castle Monorail - Fatal编程技术网

Unit testing 如何在MonoRail中对视图的输出进行单元测试?

Unit testing 如何在MonoRail中对视图的输出进行单元测试?,unit-testing,castle-monorail,Unit Testing,Castle Monorail,我一直在尝试为MonoRail编写一些初始的NUnit单元测试,已经有了一些基础知识。然而,尽管我已经设法检查了控制器操作是否设置了Flash[message]值,BaseControllerTest类似乎根本没有存储视图的输出,因此无论我调用RenderView还是操作本身,都不会向Response.OutputContent数据添加任何内容。 我还尝试调用InPlaceRenderView,尝试将其写入StringWriter,StringWriter似乎也没有得到任何回报-返回的Strin

我一直在尝试为MonoRail编写一些初始的NUnit单元测试,已经有了一些基础知识。然而,尽管我已经设法检查了控制器操作是否设置了Flash[message]值,BaseControllerTest类似乎根本没有存储视图的输出,因此无论我调用RenderView还是操作本身,都不会向Response.OutputContent数据添加任何内容。 我还尝试调用InPlaceRenderView,尝试将其写入StringWriter,StringWriter似乎也没有得到任何回报-返回的StringBuilder也是空的。 我正在创建一个新的控制器实例,然后调用 PrepareController,主目录,索引


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

虽然我没有测试视图的理想方法,但如果可以充分测试ViewComponents,这可能就不那么重要了。为了测试站点本身的视图,我可以使用Selenium。虽然从理论上讲,它可以成为NUnit测试套件的一部分,但在我的测试中,它没有在MonoDevelop下成功运行。尽管RC交互会话工作正常,但未能始终如一地启动与Selenium RC的连接。但是,Selenium测试可以从Firefox作为一个集合运行,这并不太糟糕——使用NUnit进行单元测试,然后使用Selenium套件进行集成/系统测试脚本编写,该设置将在Linux/MonoDevelop设置中运行

至于测试底层元素,您可以检查重定向和flash值集等,这样就可以了,对于测试ViewComponents,part Mock rendering会以可访问的形式返回渲染输出,因此,使用BaseViewComponentTest的基本测试类在NUnit中进行测试要容易得多,如下所示:

[Test] public void TestMenuComponentRendersOK() { var mc = new MenuComponent(); PrepareViewComponent(mc); var dict = new System.Collections.Specialized.ListDictionary(); dict.Add("data",getSampleMenuData()); dict.Add("Name","testmenu"); // other additional parameters mc.RenderComponent(mc,dict); Assert.IsTrue(this.Output.Contains("
  • "),"List items should have been added"); }
    您没有在测试上下文中设置视图引擎。根据实际使用的ViewEngine,需要对其进行初始化并将其添加到测试上下文中。无论如何,我会重新考虑运行集成测试,这些测试一直到视图。这类测试往往非常脆弱,ROI从低到负。请确保将所有逻辑都保留在视图之外。我正在尝试将逻辑排除在视图之外,并且已经创建了一个ViewComponent,我还想对其进行测试。我不希望对所有视图进行单元测试,但我想做一个示例测试,演示如何在正确获取特定页面时进行测试。我现在不再尝试对视图进行单元测试-我有一种解决方案,可以使用Selenium测试页面,尽管MonoDevelop和SeleniumRC只是通过浏览器,但它们似乎也不能很好地结合在一起。我仍然需要有一种不同的方法来测试ViewComponent——从我所读到的内容来看,这应该能够进行单元测试,但是我仍然缺少任何示例代码来展示如何设置ViewComponent的属性,等等