Какова наилучшая практика для организации структуры папок теста Ruby?
В Java обычно создаются две исходные папки src
и test
с одинаковой иерархией пакетов.
В Ruby вы просто поместите все тесты в ту же папку, что и тестируемый класс? Или вы создаете аналогичную иерархию в отдельной папке? Если да, то как вы управляете путями require
в своих модульных тестах?
Ответы
Ответ 1
Сначала каждый камень имеет типичный макет. Код почти полностью находится в lib
. В корневом каталоге есть только метаданные, такие как README, файл gemspec
и некоторые дополнительные данные конфигурации. Если вы пишете веб-приложение с чем-то вроде Rails или Sinatra, вместо этого используются их стандарты компоновки
Во всех этих типах проектов тесты можно найти в похожих местах. В зависимости от используемой структуры тестирования существуют разные стандарты.
Если вы используете Test:: Unit, тесты находятся в каталоге test
. Нет реальных стандартов относительно того, как фактически организовать тестовые файлы в этом каталоге. Мне лично было полезно, по крайней мере, частично отразить макет файла тестируемого кода. Если вы используете модули/пространства имен щедро, это должно сделать его довольно читаемым.
Если вы используете RSpec, тесты (затем называемые спецификациями) переходят в каталог spec
. Вышеупомянутые примечания о макете фактических тестов также применяются здесь.
В конце концов, в большинстве случаев разработчики принимают решение о том, как настроить свои тесты. Поскольку тесты - это область, где у любых людей разные (и строковые) мнения, нет никакого святого пути к успеху. Вы должны взглянуть на некоторые драгоценные камни, которые вы используете, и как они делают вещи. Пример макетов Test:: Unit можно найти в драгоценных камнях Rails, например. для ActiveRecord. Примером тестов RSpec является chiliproject_backlogs плагин для ChiliProject.
Ответ 2
Я тоже новичок в Ruby и задаюсь вопросом о том же. Часть, которую я не получал, заключалась в том, как организовать их иерархически, чтобы соответствовать потенциально иерархической организации компонентов в каталоге lib, а затем запускать их как набор.
Я долго не искал Google, но мои результаты уже тоньше, чем ожидалось. Самая полезная вещь, которую я нашел, это из ruby wiki:
Критерии тестирования могут быть собраны вместе в тестовые классы, которые представляют собой файлы Ruby, которые требуют других тестовых примеров:
# Файл: ts_allTheTests.rb
требуют "тест/блок"
требуют "testOne"
требуют "testTwo"
require 'testThree'
Таким образом, связанные тестовые примеры могут быть естественно сгруппированы. Кроме того, набор тестов может содержать другие тестовые пакеты, позволяющие создавать иерархию тестов.
Раньше я избегал подкаталогов в моем тестовом каталоге и делал что-то вроде этого в своем Rakefile или любом рубиновом файле, который фактически выполняет тесты:
$LOAD_PATH << File.dirname(__FILE__)
require 'test/unit'
Dir.glob('test/test_*', &method(:require))
Итак, если я объединю два метода, у меня будет файл для каждого каталога, который динамически требует тестов из этого каталога, что, в свою очередь, потребуется для файла для родительского каталога. Но это, кажется, побеждает мое первоначальное усилие, чтобы избежать скуки.
Затем я нашел несколько classes в ruby-doc, который звучит релевантно, но недостаточно документирован. Тем не менее, похоже, что для Test:: Unit больше информации доступно вверху, которое я мог бы легко пропустить. Я еще не прочитал все это, но выглядит многообещающе.