Wenn ich go test
ausfühle, dann meine Ausgabe:
Aber nachdem ich go test
erneut ausgeführt habe, sind alle meine Tests bestanden.
Tests schlagen nur fehl, wenn ich meine mysql-Datenbank zurücksetze und dann go test
zum ersten Mal ausführen.
Für jede GET
Anfrage stelle ich eine POST
Anfrage, um sicherzustellen, dass Daten in der DB erstellt wurden.
Könnte mir jemand helfen, wie man sicherstellt, dass Tests nacheinander ausgeführt werden? Das sind die POST
-Anforderungen, die vor den GET
-Anfragen ausgeführt werden?
Sie können / sollten sich nicht auf die Reihenfolge der Testausführung verlassen. Die Reihenfolge, in der die Tests ausgeführt werden, ist nicht definiert, und mithilfe von Testflags kann ausgeschlossen werden Tests vom Laufen, so haben Sie keine Garantie, dass sie überhaupt laufen werden.
Zum Beispiel führt der folgende Befehl nur Tests durch, deren Name ein 'W'
letter enthält:
Beachten Sie auch, dass einige Testfunktionen sich für die parallele Ausführung mit der T.Parallel()
-Methode qualifizieren, Das go-Tool wird die Tests neu anordnen, um zunächst nicht parallele Tests auszuführen und dann parallele Tests unter bestimmten Umständen parallel auszuführen (gesteuert durch Testflags wie -p
). Sie können Beispiele in dieser Antwort sehen: Werden Tests parallel in Go oder einzeln ausgeführt?
Tests sollten unabhängig voneinander sein. Wenn eine Testfunktion Voraussetzungen hat, kann dies in einer anderen Testfunktion nicht durchgeführt / implementiert werden.
Optionen zum Ausführen zusätzlicher Aufgaben vor dem Ausführen einer Testfunktion:
init()
function einfügen, in der _test.go
-Datei selbst. Dies wird einmal ausgeführt, bevor die Ausführung der Testfunktionen beginnt. TestMain()
Funktion zu implementieren, die zuerst aufgerufen wird und in der Sie dies tun können Führen Sie ein zusätzliches Setup durch, bevor Sie M.Run()
aufrufen, um die Ausführung der Testfunktionen auszulösen. In Ihrem Fall im Paket init()
oder TestMain()
sollten Sie überprüfen, ob Ihre Datenbank initialisiert ist (es sind Testdatensätze eingefügt), und wenn nicht, fügen Sie die Testdatensätze ein.
Beachten Sie, dass Sie ab Go 1.7 Subtests verwenden können, in denen Sie die Ausführungsreihenfolge von Subtests definieren. Weitere Informationen finden Sie im Blogpost: Verwenden von Subtests und Subbenchmarks und im Paket doc von testing
Paket.
Abgesehen von Bibliotheken von Drittanbietern wie Convey und Ginkgo , mit einfachem Golang 1.7 können Sie Tests nacheinander ausführen. Sie können weitere hier
lesen %Vor%Und Sie können sie mit folgenden Bedingungen ausführen:
%Vor% Nehmen wir an, Sie haben ein user
-Paket von einer REST-API, die Sie testen wollen. Sie müssen den Erstellungshandler testen, um den Login-Handler testen zu können. Normalerweise würde ich dies auf dem user_test.go
Dann kann ich Methoden an den UserTest-Typ anhängen, die nicht vom go test
-Befehl in irgendeiner _test.go
-Datei