Как выполнить модульное тестирование вывода представления в MonoRail? - PullRequest
0 голосов
/ 27 ноября 2010

Я пытался написать несколько начальных модульных тестов NUnit для MonoRail, уже работая над некоторыми основами.Однако, хотя мне удалось проверить, было ли установлено значение Flash ["message"] действием контроллера, кажется, что класс BaseControllerTest вообще не хранит выходные данные для представления, поэтому вызываю ли я RenderView илисамо действие, ничего не добавляется к данным Response.OutputContent.Я также пытался вызвать InPlaceRenderView, чтобы попытаться заставить его записать в StringWriter, и StringWriter, похоже, также ничего не возвращает - возвращаемый StringBuilder также пуст.Я создаю новый экземпляр контроллера, а затем вызываю PrepareController (controller, "", "home", "index");

До сих пор кажется, что BaseControllerTest вызывает прекращение любого вывода.Я что-то пропустил?Должно ли это работать?Я не уверен на 100%, потому что, хотя я также запускаю эти модульные тесты в MonoDevelop под Linux, хотя MonoRails там работает нормально.

1 Ответ

0 голосов
/ 29 ноября 2010

Хотя у меня нет идеального метода для тестирования представлений, это, возможно, менее важно, когда ViewComponents можно адекватно протестировать.Для проверки просмотров внутри самого сайта я могу использовать Selenium.Хотя теоретически это можно сделать частью набора тестов NUnit, он не был успешно запущен под MonoDevelop в моих тестах (не удалось установить постоянное соединение с Selenium RC, несмотря на то, что интерактивная сессия RC работала нормально).Тем не менее, тесты Selenium можно запускать как набор из Firefox, что не так уж и плохо: модульное тестирование с NUnit, затем сценарии интеграции / тестирования системы с использованием пакета Selenium, и эта установка будет работать в настройках Linux / MonoDevelop.

Что касается тестирования базовых элементов, вы можете проверить перенаправления и проверить набор значений флэш-памяти или тому подобное, так что все в порядке, а для тестирования ViewComponents рендеринг с частичной симуляцией возвращает возвращенный результат в доступной форме,поэтому их оказалось гораздо проще тестировать в NUnit (с базовым классом тестирования BaseViewComponentTest) следующим образом:

[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("<li>"),"List items should have been added");
}
...