Какова наилучшая практика для организации структуры папок для тестирования Ruby? - PullRequest
13 голосов
/ 20 ноября 2011

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

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

Ответы [ 2 ]

9 голосов
/ 20 ноября 2011

Сначала каждый драгоценный камень имеет типичное расположение.Код почти полностью в lib.В корневом каталоге есть только метаданные, такие как README, файл gemspec и некоторые дополнительные данные конфигурации.Если вы пишете веб-приложение с чем-то вроде Rails или Sinatra, вместо них используются их стандарты компоновки

Во всех этих типах проектов тесты можно найти в похожих местах.В зависимости от используемой платформы тестирования существуют разные стандарты.

Если вы используете Test :: Unit , тесты находятся в каталоге test.Нет никаких реальных стандартов относительно того, как на самом деле организовать тестовые файлы в этом каталоге.Я лично нашел полезным хотя бы частично отразить структуру файла тестируемого кода.Если вы используете модули / пространства имен щедро, это должно сделать его более читабельным.

Если вы используете RSpec , тесты (тогда называемые спецификациями) помещаются в каталог spec.Приведенные выше примечания о расположении реальных тестов применимы и здесь.

В конце концов, это в основном решение разработчиков, как настроить ваши тесты.Поскольку тесты - это область, в которой у всех людей разные (и разные) мнения, святого пути к успеху нет.Вы должны взглянуть на некоторые драгоценные камни, которые вы используете, и как они делают вещи.Пример макетов Test :: Unit можно найти в гемах Rails, например, для ActiveRecord .Примером тестов RSpec является плагин chiliproject_backlogs для ChiliProject.

0 голосов
/ 13 января 2013

Я тоже новичок в Ruby и задаю тот же вопрос.Часть, которую я не получил, заключалась в том, как организовать их иерархически так, чтобы они соответствовали потенциально иерархической организации компонентов в каталоге lib, а затем запустить их все как набор.но мои выводы уже хуже, чем ожидалось.Самая полезная вещь, которую я нашел, это из ruby ​​wiki :

Классы тестовых примеров могут быть собраны в наборы тестов, которые представляют собой файлы Ruby, для которых требуются другие тестовые случаи:

# Файл: ts_allTheTests.rb
требуют «test / unit»
требуют «testOne»
требуют «testTwo»
требуют «testThree»

В этомКстати, связанные тестовые случаи могут быть естественно сгруппированы.Кроме того, наборы тестов могут содержать другие наборы тестов, позволяющие построить иерархию тестов.

Раньше я избегал подкаталогов в моем каталоге тестов и делал что-то подобное в моем Rakefile или любом другом.Файл ruby, который фактически выполняет тесты:

$LOAD_PATH << File.dirname(__FILE__)
require 'test/unit'
Dir.glob('test/test_*', &method(:require))

Так что, если я объединю эти два метода, у меня будет файл для каждого каталога, который динамически требует тестов из этого каталога, что, в свою очередь, потребуется для файладля родительского каталога.Но это, кажется, побеждает мои первоначальные попытки избежать утомления.

Тогда я нашел некоторые классы в ruby-doc , которые звучали уместно, но под-documented.Тем не менее, похоже, что для Test :: Unit доступно больше информации, которую я мог бы легко пропустить.Я еще не все прочитал, но выглядит многообещающе.

...