Выполнить код в конце модуля / класса, например, Ruby test / unit - PullRequest
4 голосов
/ 15 июля 2009

Среда модульного тестирования Ruby выполняет модульные тесты, хотя никто не создает объект модульного тестирования. Например,

в MyUnitTest.rb

require 'test/unit'

class MyUnitTest < Test::Unit::TestCase
    def test_true
        assert true
    end
end

и когда я вызываю этот скрипт как

ruby MyUnitTest.rb

Метод test_true выполняется автоматически. Как это сделать?

Я пытаюсь придумать структуру, которая может делать то же самое. Я не хочу, чтобы "if __ FILE __ == $ 0" в конце каждого модуля, который использует мою платформу.

спасибо.

Ответы [ 2 ]

6 голосов
/ 15 июля 2009

Test::Unit использует для этого at_exit , который запускает код непосредственно перед выходом из приложения:

at_exit do
  puts "printed before quit"
end

.. other stuff

Я не думаю, что есть какой-либо способ запустить код специально после закрытия определения класса или модуля.

1 голос
/ 15 июля 2009

Подобно ответу Даниэля Люкрафта , вы можете определить защиту финализатора, чтобы при запуске сборщика мусора запускался некоторый код:

ObjectSpace.define_finalizer(MyClass, lambda {
  puts "printed before MyClass is removed from the Object space"
})

Но лично я думаю, что at_exit лучше подходит, поскольку его время немного более детерминировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...