4 Stimmen

Führen Sie den Code am Ende des Moduls/Klasse aus, wie bei Ruby test/unit

Das Unit-Test-Framework von Ruby führt Unit-Tests aus, auch wenn niemand ein Unit-Test-Objekt erstellt. Zum Beispiel,

in MyUnitTest.rb

require 'test/unit'

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

und wenn ich dieses Skript aufrufe als

ruby MyUnitTest.rb

wird die test_true-Methode automatisch ausgeführt. Wie wird dies gemacht?

Ich versuche, ein Framework zu entwickeln, das ähnliches tun kann. Ich möchte kein "if __ FILE __ == $0" am Ende jedes Moduls haben, das mein Framework verwendet.

Vielen Dank.

6voto

Daniel Lucraft Punkte 6926

Test::Unit verwendet at_exit dafür, das Code unmittelbar vor dem Beenden Ihrer Anwendung ausgeführt wird:

at_exit do
  puts "vor dem Beenden gedruckt"
end

.. andere Dinge

Ich glaube nicht, dass es eine Möglichkeit gibt, Code speziell nach dem Schließen einer Klasse oder eines Moduls auszuführen.

1voto

James A. Rosen Punkte 62226

Ähnlich wie Daniel Lucraft's Antwort könnten Sie einen Letzte-Aufräumer definieren, um einige Codes auszuführen, wenn der Garbage Collector ausgeführt wird:

ObjectSpace.define_finalizer(MyClass, lambda {
  puts "Vor dem Entfernen von MyClass aus dem Objektraum gedruckt"
})

Aber persönlich denke ich, dass at_exit besser geeignet ist, da sein Timing etwas deterministischer ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X