Дайте web.py попытка. Это очень просто и может обеспечить минимализм, который Вы ищете.
Вы можете просто исправить 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
Действительно ли вам нужна глобальная настройка do, или было бы полезно иметь вспомогательный метод, определенный в Test :: Unit :: TestCase
, и вызывать его в тестах, которые в нем нуждаются? Подход с использованием вспомогательного метода - это то, что я считаю полезным в своих проектах - состояние и намерение настройки более ясны в каждом отдельном тесте, и мне не нужно прыгать, чтобы найти какой-то «скрытый» метод настройки. Довольно часто глобальная настройка - это запах кода, указывающий на то, что вам нужно переосмыслить часть вашего дизайна, но YMMV.
Обновление
Поскольку вы используете ActiveSupport, вот первый удар по тому, что не потребует вызова super
каждый раз, когда вы определяете настройку
в вашем тестовом примере. Я не знаю, насколько это ценно, поскольку для этого требуется вызов другого метода, и любой разработчик может просто определить свой собственный метод 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