Вы можете просто пропатчить Test::Unit::TestCase
и определить setup
метод:
class Test::Unit::TestCase
def setup
puts 'in setup'
end
end
И ваши подклассы будут использовать это по умолчанию:
class FooTest < Test::Unit::TestCase
def test_truth
assert true
end
end
class BarTest < Test::Unit::TestCase
def test_truth
assert true
end
end
Если тестовый пример должен иметь свою собственную настройку, вам нужно сначала вызвать super
, чтобы убедиться, что глобальная установка выполняется:
class BazTest < Test::Unit::TestCase
def setup
super
puts 'custom setup'
end
def test_truth
assert true
end
end
Действительно ли вам необходимо выполнить глобальную настройку или было бы полезно иметь вспомогательный метод, определенный в Test::Unit::TestCase
, и вызывать его в тестах, которые в этом нуждаются? Метод вспомогательных методов - это то, что я считаю полезным в своих проектах & ndash; состояние и намерение настройки более ясны в каждом отдельном тесте, и мне не нужно прыгать, чтобы найти какой-то «скрытый» метод настройки. Довольно часто глобальные настройки - это запах кода, указывающий на то, что вам нужно переосмыслить часть своего дизайна, но YMMV.
Обновление
Поскольку вы используете ActiveSupport, вот первый удар по чему-то, что не потребует вызова super
каждый раз, когда вы определяете метод setup
в своем тестовом примере. Я не знаю, насколько это ценно, так как он требует вызова другого метода, и любой разработчик может просто определить свой собственный метод setup
в тестовом примере, который аннулирует это изменение. Вот оно:
require 'rubygems'
require 'test/unit'
require 'active_support'
require 'active_support/test_case'
class ActiveSupport::TestCase
def setup_with_global
puts 'In Global setup'
setup_without_global
end
alias_method_chain :setup, :global
end
class FooTest < ActiveSupport::TestCase
def setup_without_global
puts 'In Local setup'
end
def test_truth
assert true
end
end