2015-08-20 3 views
1

Я искал вокруг Интернета долгую, разочаровывающую, в то время как, и я все еще довольно смущен относительно того, что цель метода teardown() в MiniTest и как это должно быть используемый.Rails-Как использовать метод Teardown от MiniTest

Основной смысл, который у меня есть, заключается в том, что он проходит 1-й запуск после каждого теста, а 2 - отменяет все, что было сделано во время теста, чтобы позволить будущим испытаниям работать в чистой среде.

Тем не менее, я не могу понять, какие вещи ему нужно отменить: нужно ли это очистить БД? Сбрасывать переменные класса? и т. д.

Я также не понимаю, должен ли метод быть явно заполнен или нет. Я нашел много примеров, где teardown() полностью исключен из примера.

(Мое лучшее предположение заключается в том, что существует супер-метод teardown, который запускается автоматически и заботится о некоторых вещах. Это объясняет, почему это часто не учитывается, а также объясняет, почему некоторые вещи сбрасываются в заданном teardown() метод и некоторые из них не Но я до сих пор не знаю, какие вещи и которые не являются)

Короче:..

ли нужно явно создать демонтаж? В каких обстоятельствах он должен быть перезаписан и в каком бы он не был?

ответ

2

Самый простой ответ заключается в том, что вы используете #teardown в каждом тесте, но вам не нужно беспокоиться об этом. Подобно жизненному циклу Rails, существует минимальный жизненный цикл. Есть крючки для ввода логики и поведения, которые будут использоваться вашими тестами. Основным в тестах Rails является транзакция базы данных. Каждый тест, который использует ActiveSupport::TestCase, выполняется в транзакции базы данных. Поток, как это:

  1. Создать транзакцию (Minitest::Test#setup)
  2. базы данных Запустите тестовый метод (MyTest#test_something)
  3. Откат транзакции базы данных (Minitest::Test#teardown)

Это несколько общих для чтобы использовать объекты для использования в тестах #setup. После завершения тестового метода тестовый объект собирает мусор, поэтому большинство людей не используют #teardown для очистки после теста. Из-за этого #teardown обычно является более сложной функцией, которую вы обычно не используете при написании тестов. Я вижу, что он используется гораздо чаще при тестировании библиотек, которые улучшают Minitest.

Но есть моменты, когда я использую #teardown в своих тестах. Вот пример того, когда я могу его использовать.

require "minitest/autorun" 

class Foo 
    def initialize namer 
    @namer = namer 
    end 
    def name 
    @namer.name 
    end 
end 

class FooTest < Minitest::Test 
    def setup 
    @namer_mock = Minitest::Mock.new 
    @namer_mock.expect :name, "foo" 
    @foo = Foo.new @namer_mock 
    end 

    def test_name 
    assert_equal "foo", @foo.name 
    end 

    def teardown 
    @namer_mock.verify 
    end 
end 
+2

Является ли это правильным резюме (просто хочу убедиться, что я понимаю)? В принципе, '# teardown' НЕ требуется для очистки базы данных или уничтожения экземпляров, которые были созданы во время теста. Это необходимо (или может быть, по крайней мере), если вы хотите сделать что-то более продвинутое после запуска тестов; что-то, кроме того, что DB не пуст, и экземпляры исчезли. Это так? –

+1

Это правильно. – blowmage