2010-04-05 10 views
21

Wenn es mehrere Methoden in der Testklasse gibt, habe ich festgestellt, dass die auszuführende Reihenfolge alphabetisch ist. Aber ich möchte die Reihenfolge der Ausführung anpassen. Wie definiere ich die Ausführungsreihenfolge?Django TestCase Testreihenfolge

Zum Beispiel: testTestA wird zuerst geladen als testTestB.

class Test(TestCase): 
    def setUp(self): 
     ... 

    def testTestB(self): 
     #test code 

    def testTestA(self): 
     #test code 

Antwort

42

Ein Grundsatz von Unit-Testing ist, dass jeder Test unabhängig von allen anderen sein sollte. Wenn in Ihrem Fall der Code in testTestA vor testTestB kommen müssen, dann könnte man beide verbinden sich zu einem Test:

def testTestA_and_TestB(self): 
    # test code from testTestA 
    ... 
    # test code from testTestB 

oder vielleicht würde

def TestA(self): 
    # test code 
def TestB(self): 
    # test code 
def test_A_then_B(self): 
    self.TestA() 
    self.TestB() 

Die Test Klasse nur besser sein, testet diejenigen Methoden, deren Name mit einem Kleinbuchstaben test... beginnt. Sie können also die zusätzlichen Hilfsmethoden TestA und TestB einfügen, die nur ausgeführt werden, wenn Sie sie explizit aufrufen.

+6

+1: Habe dies mehr als einmal selbst gemacht, um Tests miteinander zu verketten und die Rüstzeit zu reduzieren. –

10

Soweit ich weiß, gibt es keine Möglichkeit, Tests zu bestellen, außer sie umzubenennen. Können Sie erklären, warum Sie Testfälle in der bestimmten Reihenfolge ausführen müssen? In Unit-Tests wird es normalerweise als schlechte Übung betrachtet, da es bedeutet, dass Ihre Fälle nicht unabhängig sind.

+0

Wie zum Testen erstellen Sie ein Konto und alle folgenden Vorgänge auf Rechnung. Was könnte die Alternative zu diesem Ansatz sein? – zsong

+0

@ziang: Die Idee ist, dass Sie nur eine * Operation testen. Wenn Sie Vorgänge auf einem Konto testen möchten, erstellen Sie ein Dummy-Konto, führen Sie dann einen Vorgang aus und prüfen Sie. Tun Sie dies einmal für jede zu testende Operation, das gibt Ihnen einen Test pro Operation. – sleske

+0

Ich verstehe. Danke für deinen Vorschlag. – zsong

5

zum Thema aktualisieren (von Dokumentation):

Order in which tests are executed

Damit alle mit einer sauberen Datenbank TestCase Code zu gewährleisten beginnt, ordnet die Django Test-Runner-Tests in dem folgender Weg:

  • Alle TestCase Unterklassen werden zuerst ausgeführt.
  • Dann werden alle anderen Django-basierte Tests (Testfälle basierend auf SimpleTestCase, einschließlich TransactionTestCase) sind ohne besondere Reihenfolge laufen garantiert noch unter ihnen erzwungen.
  • Dann andere unittest.TestCase Tests (einschließlich doctests), der die Datenbank es ändern kann in seinen ursprünglichen Zustand ohne Wiederherstellung ausgeführt werden.

Hinweis: Die neue Ordnung der Tests unerwartete Abhängigkeiten von Test Fall Bestellung offenbaren kann. Dies ist der Fall bei Doctests, die sich auf den Status in der Datenbank durch einen gegebenen TransactionTestCase Test verlassen haben, müssen sie aktualisiert werden, um unabhängig zu laufen.

Verwandte Themen