Слишком часто люди пишут тесты, которые не убираются после них, когда они связываются с состоянием. Часто это не имеет значения, поскольку объекты, как правило, разрушаются и воссоздаются для большинства тестов, но есть некоторые прискорбные случаи, когда существует глобальное состояние объектов, сохраняющееся в течение всего запуска теста, и когда вы запускаете тесты, которые зависят и изменяются это глобальное состояние, в определенном порядке, они терпят неудачу.
Эти тесты и, возможно, реализации, очевидно, нужно исправить, но очень сложно попытаться выяснить, что является причиной сбоя, когда тесты, которые влияют друг на друга, могут быть не единственными вещами в полном наборе тестов. Это особенно сложно, когда изначально не ясно, что сбои зависят от порядка и могут прерываться периодически или на одном компьютере, но не на другом. Например:
rspec test1_spec.rb test2_spec.rb # failures in test2
rspec test2_spec.rb test1_spec.rb # no failures
В RSpec 1 было некоторые опции (--reverse, --loadby) для упорядочивания тестовых прогонов, но они исчезли в RSpec 2 и были минимально полезны при отладке. эти проблемы в любом случае.
Я не уверен в порядке, который по умолчанию используют RSpec 1 или RSpec 2, но один специально разработанный набор тестов, который я использовал в прошлом, случайным образом упорядочивал тесты при каждом запуске, чтобы эти сбои обнаруживались быстрее. В результатах теста семя, которое использовалось для определения порядка, было напечатано с результатами, чтобы было легко воспроизвести сбои, даже если вам нужно было поработать, чтобы сузить отдельные тесты в наборе, которые их вызывали. Затем были опции, которые позволяли вам запускать и останавливать любой заданный тестовый файл в порядке, что позволяло вам легко выполнять бинарный поиск для поиска проблемных тестов.
Я не нашел таких утилит в RSpec, поэтому я спрашиваю здесь: какие есть хорошие способы отладки этих типов зависимых от порядка тестовых сбоев?