Gibt es eine Funktion, die zu Beginn / am Ende eines Testszenarios ausgelöst wird? Die Funktionen setUp und tearDown werden vor / nach jedem einzelnen Test ausgelöst.
Normalerweise möchte ich Folgendes haben:
class TestSequenceFunctions(unittest.TestCase):
def setUpScenario(self):
start() #launched at the beginning, once
def test_choice(self):
element = random.choice(self.seq)
self.assertTrue(element in self.seq)
def test_sample(self):
with self.assertRaises(ValueError):
random.sample(self.seq, 20)
for element in random.sample(self.seq, 5):
self.assertTrue(element in self.seq)
def tearDownScenario(self):
end() #launched at the end, once
Im Moment sind diese SetUp und TearDown Unit-Tests und verteilen sich auf alle meine Szenarien (die viele Tests enthalten). Einer ist der erste Test, der andere ist der letzte Test.
python
unit-testing
Schwan
quelle
quelle
Antworten:
Ab 2.7 (gemäß Dokumentation ) erhalten Sie
setUpClass
undtearDownClass
welche vor und nach den Tests in einer bestimmten Klasse ausgeführt werden. Wenn Sie eine Gruppe von ihnen in einer Datei haben, können Sie alternativsetUpModule
undtearDownModule
( Dokumentation ) verwenden.Andernfalls besteht Ihre beste Wahl wahrscheinlich darin, Ihre eigene abgeleitete TestSuite zu erstellen und zu überschreiben
run()
. Alle anderen Aufrufe werden vom übergeordneten Element bearbeitet, und run führt Ihren Setup- und Teardown-Code für einen Aufruf bis zurrun
Methode des übergeordneten Elements auf .quelle
Ich habe das gleiche Szenario, für mich funktionieren die Methoden setUpClass und tearDownClass perfekt
quelle
Für Python 2.5 und bei der Arbeit mit Pydev ist es etwas schwierig. Es scheint, dass pydev die Testsuite nicht verwendet, sondern alle einzelnen Testfälle findet und alle separat ausführt.
Meine Lösung hierfür war die Verwendung einer Klassenvariablen wie folgt:
Wenn Sie mit diesem Trick von diesem
TestCase
(anstelle des Originalsunittest.TestCase
) erben, erben Sie auch den WertrunCount
0. In der Ausführungsmethode wird dann derrunCount
untergeordnete Testfall überprüft und inkrementiert. Dadurch bleibt dierunCount
Variable für diese Klasse bei 0.Dies bedeutet, dass der
setUpClass
Test nur einmal pro Klasse und nicht einmal pro Instanz ausgeführt wird.Ich habe noch keine
tearDownClass
Methode, aber ich denke, mit diesem Zähler könnte etwas erreicht werden.quelle
Hier ein Beispiel: 3 Testmethoden greifen auf eine gemeinsam genutzte Ressource zu, die einmal und nicht pro Test erstellt wird.
quelle