Ответ 1
Вы можете просто установить 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