it-swarm.com.de

Testaufbau und -abbau für jeden laufenden Test

Ich verwende das go "testing" -Paket. Führe meine Tests wie folgt aus.

func TestMain(m *testing.M) {

   ...
   // Setup
   os.Exit(m.Run())
   // Teardown
}

Dadurch wird vor dem Ausführen eines Tests ein Setup ausgeführt, und nach Abschluss aller Tests wird ein Abbau durchgeführt. Und ich brauche das, da das Setup die Datenbank aufbaut. Aber auch, ich muss einen Weg finden, einen Test/Testdown pro Test durchzuführen. Für die durchgeführten Unit-Tests möchte ich die Datenbank vor jedem Test löschen, damit der Inhalt der Datenbank keine Probleme verursacht und unerwartetes Verhalten auftritt.

16
Virtually Real

Wie im Artikel " Go Unit Test Setup and Teardown " von Kare Nuorteva gezeigt, könnten Sie eine Setup-Funktion verwenden, die Ihnen eine Zurücksetzungsfunktion zurückgibt.

Siehe diesen 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 ist für die Definition und Rückgabe des Zerfalls verantwortlich.

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)
        }
    })
}
17
VonC

Möglicherweise überlegen Sie, ob eine Tabelle der Funktionen subTestSetup, subTest und subTestTeardown die DB-Verbindung/andere allgemeine Elemente in einer Struktur übergeben soll (SubTestSetup kann diese Struktur zurückgeben). Möglicherweise können Sie einige/Teile des Setups auch in verschiedenen Funktionen wiederverwenden und diese bei steigenden Testanforderungen modular halten. Rufen Sie subTestTeardown () auf, bevor Sie den SubTest aufrufen, um sicherzustellen, dass der Abreißcode ausgeführt wird, auch wenn bei SubTest Probleme auftreten.

0
Ravi