Глобальная установка и блоки разрушения в Тесте:: Единица

Дайте web.py попытка. Это очень просто и может обеспечить минимализм, который Вы ищете.

21
задан Andrew Grimm 11 October 2011 в 23:07
поделиться

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

Действительно ли вам нужна глобальная настройка 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
7
ответ дан 29 November 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: