Для ruby существует просто безумное количество платформ тестирования, выбор из которых сводится к личным предпочтениям. Мой личный фаворит бунт
Riot делает несколько предположений о том, как тесты должны быть написаны. Двумя важными являются то, что вы должны тестировать одну «вещь» за тест, и что утверждения не должны изменять эту «вещь». Делая эти предположения, тесты могут быть значительно ускорены, так как они должны запускать установку только один раз для каждого блока (а не один раз для каждого теста).
пример из файла readme
context "An Array" do
setup { Array.new }
context "with one element" do
setup { topic << "foo" }
asserts("is not empty") { !topic.empty? }
asserts("returns the element on #first") { topic.first == "foo" }
end
end
topic
- это способ, которым вы ссылаетесь на то, что было настроено в setup
. Это также основа синтаксиса, есть идея «макросов утверждения», которая позволит вам испортить ваши тесты. Вы также можете использовать denies
вместо asserts
для отрицательного утверждения. Учитывая эти две вещи, приведенный выше пример можно записать как
context "An Array" do
setup { Array.new }
context "with one element" do
setup { topic << "foo" }
denies("is not empty") { topic }.empty?
asserts("returns the element on #first") { topic.first }.equals('foo')
end
end
Все еще своего рода верхушка айсберга, но, надеюсь, это даст вам хоть какое-то чувство к нему.
Я бы сказал, помимо скорости, что мне больше всего нравится в бунте, так это то, насколько он структурирован. Это отнимает некоторую свободу, но только на самом деле свободу делать плохие вещи. Я нахожу единственные случаи, когда у меня возникают проблемы с этим, когда я собираюсь написать плохой тест, и неспособность сделать это заставляет меня сделать шаг назад и подумать о том, что я делаю.
Еще одна вещь, которую я бы упомянул в отношении TDD, это spork . Идея состоит в том, что загрузка окружения рельсов может легко занять 30-40 секунд, и это может стать очень раздражающим, когда вы выполняете tdd. Spork настраивает среду rails, а затем создает процесс при каждом запуске теста. Все уже в памяти, поэтому тестовые запуски запускаются очень быстро.
В настоящее время они поддерживают rspec, cucumber и test / unit. (Сорта планирует оказать поддержку в борьбе с беспорядками однажды, когда у меня будет время)