Разработка на Rails при помощи тестов
Составитель Брайан Леонард (Brian Leonard), редактор Бет Стернс (Beth Stearns)
Декабрь 2007 г. [номер версии: V6.0-1]
В этой статье описываются функциональные возможности среды IDE NetBeans, позволяющие тестировать код Ruby и Rails. Для упрощения модульного тестирования приложения имеется несколько вариантов тестирования.
Эта статья требует наличия элементарных знаний по программированию с использованием технологии Ruby.
Содержание
Для работы с этой статьей требуется следующее программное обеспечение.
Поддержка тестирования Ruby в среде IDE NetBeans
В среде IDE NetBeans поддерживаются некоторые инфраструктуры и возможности тестирования Ruby. Ниже будут указаны поддерживаемые функции, а также будет приведена базовая информация по использованию этих возможностей тестирования. Кроме того, будут продемонстрированы некоторые возможности среды NetBeans, позволяющие отслеживать ошибки и переключаться между исходным кодом и тестами.
Перед рассмотрением возможностей тестирования, относящихся к Ruby, ознакомимся с модульным тестированием и его основными понятиями. Под модульным тестированием подразумевается тестирование, выполняемое разработчиками для подтверждения правильности работы отдельных единиц тестирования исходного кода приложения. "Единица тестирования" здесь определяется как наименьшая часть приложения, подлежащая тестированию. Таким образом, в случае объектно-ориентированного программирования, единица тестирования – это класс, например базовый класс, суперкласс, абстрактный класс, либо производный (или дочерний) класс. С другой стороны, в процедурном программировании единицей тестирования обычно является отдельная программа, функция или процедура. Важно различать единицы тестирования и модули; последние представляют собой более крупные части предложения и, как правило, состоят из нескольких единиц.
При модульном тестировании обычно используется набор тестов, не зависящих друг от друга. В тесте могут использоваться фиктивные объекты для поддержки тестирования, особенно если использование реального объекта затруднено, занимает много времени, или если этот объект трудно создать. Фиктивные объекты используются для тестирования поведения других объектов, поскольку они управляемо имитируют поведение реального объекта. Удачный пример фиктивного объекта – манекен, используемый вместо настоящего автомобилиста при испытаниях на удар при столкновении.
Средства тестирования или автоматизированные инфраструктуры тестирования также занимают важное место в модульном тестировании. Средства тестирования представляют собой набор программного кода и тестовых данных, позволяющий запускать программу в разных условиях при постоянном контроле поведения и выходных данных модуля. Средства тестирования позволяют автоматизировать модульные тесты благодаря возможности многократного использования.
Тесты Test::Unit
В Ruby встроена инфраструктура тестирования, называемая Test::Unit. Поскольку Test::Unit непосредственно поддерживается в среде IDE NetBeans, создавать новые модульные тесты можно непосредственно в меню "New" проекта. В окне "Projects" щелкните правой кнопкой мыши проект Ruby и выберите "New > Ruby Unit Test".
В диалоговом окне "New Ruby Unit Test" следует ввести информацию о файле модульного тестирования, в том числе класс, в отношении которого должно проводиться тестирование, имя тестового файла, его модуль и местоположение целевого каталога в дереве проекта. При нажатии кнопки "Finish" в IDE создается скелетный файл модульного тестирования, в который добавляется конкретный тестовый код. Этот файл размещается в указанном местоположении папки в дереве проекта.
Щелкните для увеличения
Существует несколько способов тестирования или запуска модульного теста. Как правило, используются пункты меню "Run File" или "Test File" в контекстном меню окна "Editor" (также можно выбрать пункт меню "Run -> Run File" для файла в окне "Project").
Сравнение режимов "Test File" и "Run File"
Режим "Test File" (Ctrl+F6) в контекстном меню редактора и в меню "Run" является предпочтительным способом запуска тестового файла. Режим "Test File" можно запустить непосредственно из тестового файла или из класса, который необходимо протестировать. Для работы с режимом "Run File", также доступным в контекстном меню редактора и в меню "Run", необходимо перейти к тестовому файлу для тестируемого класса. Преимущество режима "Test File" состоит в том, что можно находиться в файле, который необходимо тестировать, но переходить к тестовому файлу для класса не требуется.
Проиллюстрируем удобство режима "Test File": предположим, что разрабатывается модульный тест для контроллера Rails. Во время работы с тестовым файлом контроллера запускается режим "Test File", и этот же файл тестирования выполняется в качестве теста. Однако можно было бы с тем же успехом внести изменения в сам класс контроллера. Если во время изменения класса контроллера возникает необходимость в его тестировании, достаточно запустить режим "Test File" путем нажатия Ctrl+F6; при этом запускается тестовый файл, соответствующий классу, с которым в настоящее время ведется работа. Если вместо этого воспользоваться режимом "Run File" для класса контроллера, URL-адрес контроллера откроется в обозревателе. Таким образом, режим "Run File" можно расценивать как запуск части приложения в обозревателе, а режим "Test File" – как запуск соответствующих тестов для данной части приложения.
Между режимами "Test File" и "Run File" существует еще одно важное различие. Режим "Test File", примененный в отношении файла тестирования, запускает файл как тест. При запуске файла как теста IDE оповещается о том, что выполняемый файл является тестом, и в выходных данных отслеживаются ошибки. В настоящее время, если ошибки обнаруживаются, в нижней части окна редактора выводится красное предупреждение, подобное красному сообщению при автоматическом тестировании.
Те же различия относятся и к режимам "Run Project" и "Test Project". Режим "Test Project", который указан в контекстном меню проекта как "Test", запускает все тесты в проекте. (В настоящее время запуск всех тестов в проекте работает только для проектов Rails.) Режим "Run" для проекта фактически сводится к запуску проекта в обозревателе.
В окне "Output" в нижней части экрана выводятся выходные данные, полученные в результате выполнения модульных тестов. Поскольку выходные данные теста снабжены гиперссылками, по ним можно переходить с помощью пункта меню "Navigate -> Next Error".
Пункт меню "Go to Test" в контекстном меню окна редактора позволяет быстро переходить между классом и соответствующими тестами. Щелкните правой кнопкой мыши в любом месте исходного файла в окне редактора и выберите пункт меню "Navigate -> Go to Test" (Control+Shift+T в Windows и Command+Shift+T на Макинтоше). Действие "Go to Test" выполняется с учетом правил Test::Unit. Также учитываются правила Rails, RSpec и ZenTest.
Щелкните для увеличения
Автоматическое тестирование
Проект Ruby также может поддерживать режим автоматического тестирования "Auto Test". При автоматическом тестировании модульные тесты запускаются автоматически при каждом изменении файла. Для проектов Rails, как и во многих других случаях, режим "Auto Test" позволяет определить, какие модульные тесты требуется запустить. Если определить тесты невозможно, автоматическое тестирование по умолчанию сводится к выполнению всех модульных тестов.
Режим "Auto Test" становится доступен при установке библиотеки Gem Ruby "ZenTest". Для установки ZenTest или любых других библиотек Gem Ruby используется пункт "Ruby Gems" в меню "Tools". При выборе этого пункта меню выполняется загрузка установленных библиотек Gem Ruby, и выводятся все доступные и новые библиотеки. Для просмотра уже установленных библиотек Gem Ruby перейдите к вкладке "Installed".
Щелкните для увеличения
Если библиотека ZenTest не установлена, щелкните вкладку "New Gems", перейдите к zentest в списке, выберите его и нажмите кнопку "Install".
Щелкните для увеличения
При этом выводится сообщение, указывающее на, что ZenTest и соответствующие библиотеки и средства установлены.
После установки ZenTest в контекстном меню проекта должен появиться пункт "Auto Test". В окне "Projects" щелкните правой кнопкой мыши узел проекта Ruby и выберите "Auto Test" для запуска автоматического тестирования проекта. Как уже указывалось, при изменении файлов с автоматическим тестированием выполняются либо требуемые модульные тесты, либо все модульные тесты.
Результаты автоматического тестирования отображаются в окне "Output". В случае ошибок выводится сводное сообщение в нижней части окна редактора. Несмотря на то, что панель "Auto Test" в окне "Output" может быть скрыта, можно перейти к вкладке "Auto Test" и ознакомиться с подробными данными для определения причины ошибки. Также можно перейти по гиперссылкам в результатах автоматического тестирования или непосредственно обратиться к неудачным тестам.
Щелкните для увеличения
Сочетание клавиш для действия "Go to Test" (Ctrl+Shift+T) также работает в контексте автоматического тестирования; при этом выполняется переход непосредственно к соответствующему файлу теста.
Примечание: В ближайшее время поддержка автоматического тестирования будет расширена. Среди возможных расширений можно отметить вывод ошибок теста в списке задач. Поддержка автоматического тестирования JRuby также будет усовершенствована. Если при использовании автоматического тестирования для JRuby возникают проблемы, временно переключитесь на стандартный Ruby.
Тесты Rspec
Еще одним средством для модульного тестирования является библиотека Gem Ruby rspec. Она поставляется вместе со средой IDE NetBeans в составе дистрибутива JRuby, так что если используется встроенный интерпретатор Ruby, библиотека rspec уже установлена. При установленной библиотеке rspec в проектах имеется каталог spec, в котором содержатся файлы спецификации.
Однако если требуется использовать стандартный Ruby (интерпретаторы можно переключать в диалоговом окне "Options"), необходимо проверить наличие установленной библиотеки rspec (см. первый рисунок в разделе Автоматическое тестирование). Если библиотека не установлена, выберите "Tools -> Ruby Gems", затем перейдите к вкладке "New Gems" и установите ее. Для использования библиотеки rspec с Rails может потребоваться установка другой библиотеки Gem Ruby; рекомендуется ознакомиться с этими указаниями.
Для открытия любого из этих файлов спецификации можно использовать действие "Go to Test". Для запуска файла спецификации под управлением rspec необходимо выбрать "Test File" или "Run File" из контекстного меню редактора; при этом тестирование происходит в соответствии с параметрами файла спецификации spec.opts из каталога spec. Следует отметить, что вышеприведенные соображения относятся и к выбору между вариантами тестирования и выполнения файла в этом контексте. Тест также можно запустить из среды IDE с другим набором параметров, например, с отключенными красными и зелеными флагами. Создайте файл spec.opts.netbeans с другими параметрами и поместите этот файл в тот же каталог spec.
Шаблоны файлов spec на данный момент отсутствуют, но запланированы к выпуску.
Заключение
В этой статье были рассмотрены возможности среды IDE NetBeans для тестирования приложений на Ruby, а именно базовая функция модульного тестирования, режим автоматического тестирования и библиотека rspec. Также были представлены указания по установке библиотек Gem Ruby в среде IDE и по использованию сочетаний клавиш IDE для тестирования.
Что дальше?
>> Дополнительная документация по Ruby в среде NetBeans