2017-02-18 2 views
11

Ich verwende go "Test" -Paket. Führen Sie meine Tests wie folgt aus.Test-Setup und Teardown für jeden Test in gehen

Damit wird ein Setup ausgeführt, bevor ein Test ausgeführt wird, und ein Teardown nach Abschluss aller Tests. Und ich brauche das, da das Setup die DB aufstellt. Aber auch, ich brauche, und noch eine Möglichkeit zu finden, eine Test-Setup/Teardown zu starten. Für die Komponententests, die ich ausführe, möchte ich die DB vor jedem Test löschen, damit es keine Probleme mit dem Inhalt der DB gibt, die unerwartetes Verhalten verursachen.

Antwort

11

Wie im Artikel "Go unit test setup and teardown" von Kare Nuorteva gezeigt, könnten Sie eine Setup-Funktion verwenden, die Ihnen ... eine Teardown-Funktion zurückschickt.

Siehe this gist:

func setupSubTest(t *testing.T) func(t *testing.T) { 
    t.Log("setup sub test") 
    return func(t *testing.T) { 
     t.Log("teardown sub test") 
    } 
} 

Die Setup-Funktion zuständig ist, zu definieren und Zurückführen der Teardown ein.

Für jeden Test, zum Beispiel in einem tabellengesteuerten Testszenario:

for _, tc := range cases { 
    t.Run(tc.name, func(t *testing.T) { 
     teardownSubTest := setupSubTest(t) 
     defer teardownSubTest(t) 

     result := Sum(tc.a, tc.b) 
     if result != tc.expected { 
      t.Fatalf("expected sum %v, but got %v", tc.expected, result) 
     } 
    }) 
} 
+0

Danke. Während es nahe an dem ist, was ich will, suchte ich nach einem Pre- und Post-Hook, der das automatisch macht, ohne zu vergessen. In Python ist das genau das, was ich früher gemacht habe, mit einem einfachen Test-Runner. Aber ich akzeptierte, dass dies in Golang nicht möglich ist. –

0

Sie können prüfen, eine Tabelle von Funktionen subTestSetup, Subtest und subTestTeardown die DB-Verbindung/andere gemeinsamen Elemente in einer Struktur hindurchgeht (subTestSetup kann diese Struktur zurückgeben). Sie können möglicherweise einige/Teile des Setups wiederverwenden & in verschiedenen Funktionen zu zerreißen & halten Sie diese modulare, wie Ihre Testanforderungen wächst. Rufen Sie subTestTeardown() auf, bevor Sie den Untertest aufrufen, um sicherzustellen, dass der Abbruchcode auch dann ausgeführt wird, wenn ein Problem mit dem Untertest besteht.

Verwandte Themen