2012-11-30 6 views
7

Ich habe eine MiniTest-Suite. Ich benutze die grundlegenden Minitest::Unit::TestCase, nicht Spezifikationen. Ich habe setup und teardown Methoden in meiner TestCase Unterklasse definiert. Sie funktionieren perfekt, wenn ich eine Testdatei wie folgt starte: ruby test/whatever_test.rb. Aber wenn ich rufe rake test, setup und teardown werden nicht aufgerufen. Der relevante Teil meiner Rakefile ist:Minitest #setup und #teardown nicht aufgerufen, wenn der Test über Rake läuft

require 'rake/testtask' 

Rake::TestTask.new do |t| 
    t.test_files = FileList['test/*_test.rb'] 
    t.verbose = true 
end 

Warum sollte nicht die setup und teardown ausgeführt werden, wenn Rake::TestTask verwendet wird?

Ich würde den Testfall Code hier einfügen, aber es gibt eine Menge davon. Ich werde sicherlich eine Teilmenge davon einfügen, wenn es einen bestimmten Abschnitt gibt, den Sie sehen möchten.

Ich laufe Minitest 4.3.2 auf Ruby 1.9.3-p194.

+1

Können Sie einen minimalen nicht funktionierenden Test posten? – tadman

Antwort

14

Das Problem war, dass ein anderer Testfall die Methoden setup und teardown überschrieb. Ich hatte versehentlich zwei Testfälle den gleichen Klassennamen gegeben, weshalb das Überschreiben passiert ist. Natürlich ist dieser Fehler nicht aufgetreten, wenn ich einen einzelnen Testfall ausgeführt habe, was den Unterschied im Verhalten bei der Verwendung von Rake erklärt.

+0

Hatte dieses ähnliche Problem in Rails 5 System Tests (die Minitest verwendet). Die Setup-Methode für einen Systemtest wurde nicht ausgeführt, als wir alle Systemtests ausgeführt haben, aber sie wurde ausgeführt, als wir nur diese Systemtestdatei ausgeführt haben. Unser Fix war einfach das Umbenennen der Systemtestdatei in etwas anderes, und das Überschreiben wurde behoben. Vielen Dank! – Neil

1

In meinem Fall schrieb ich Tests für Socket-Kommunikation und hatte eine Hilfsmethode namens send hinzugefügt. Da MiniTest intern send verwendet, um die Teardown-Methoden aufzurufen, hat es stattdessen meine eigene send statt der Methode-Dispatch aufgerufen.

Verwandte Themen