Wie werden Golang-Tests sequenziell ausgeführt?

8

Wenn ich go test ausfühle, dann meine Ausgabe:

%Vor%

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?

    
Varun Patro 03.07.2015, 08:14
quelle

3 Antworten

18

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:

%Vor%

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:

  • Sie können es in die Testfunktion selbst einfügen
  • Sie können es in ein Paket init() function einfügen, in der _test.go -Datei selbst. Dies wird einmal ausgeführt, bevor die Ausführung der Testfunktionen beginnt.
  • Sie können sich dafür entscheiden, eine 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.
  • Sie können die obigen Optionen mischen.

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.

    
icza 03.07.2015, 10:03
quelle
5

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

haben %Vor%

Dann kann ich Methoden an den UserTest-Typ anhängen, die nicht vom go test -Befehl in irgendeiner _test.go -Datei

ausgeführt werden %Vor%     
CESCO 27.09.2016 20:59
quelle
2

Der beste Weg, dies zu erreichen, ist die Erstellung eines TestMain , wie hier hier dargestellt.

%Vor%     
nouney 03.07.2015 08:26
quelle

Tags und Links