Подтвердить что ты не робот

Какова наилучшая практика для организации структуры папок теста Ruby?

В Java обычно создаются две исходные папки src и test с одинаковой иерархией пакетов.

В Ruby вы просто поместите все тесты в ту же папку, что и тестируемый класс? Или вы создаете аналогичную иерархию в отдельной папке? Если да, то как вы управляете путями require в своих модульных тестах?

4b9b3361

Ответ 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 больше информации доступно вверху, которое я мог бы легко пропустить. Я еще не прочитал все это, но выглядит многообещающе.