Ich habe mehrere Pakete für eine Web-API implementiert, jede mit ihren eigenen Testfällen. Wenn jedes Paket mit go test ./api/pkgname
getestet wird, bestehen die Tests. Wenn ich alle Tests gleichzeitig mit go test ./api/...
ausführen möchte, scheitern die Testfälle immer.Serielle Ausführung von Paket-Tests
In jedem Testfall neu erstellen ich das gesamte Schema mit DROP SCHEMA public CASCADE
, gefolgt von CREATE SCHEMA public
und alle Migrationen anwenden. Die Testsuite meldet Fehler zufällig zurück und sagt, dass eine Relation/Tabelle nicht existiert, daher denke ich, dass jede Testsuite (pro Paket) irgendwie parallel ausgeführt wird, wodurch der DB-Status in Unordnung gebracht wird.
Ich habe versucht, einige Testflaggen wie go test -cpu 1 -parallel 0 ./src/api/...
ohne Erfolg zu übergeben.
Könnte das Problem hier parallel laufende Tests sein, und wenn ja, wie kann ich die serielle Ausführung erzwingen?
Update:
Derzeit verwende ich diese Abhilfe, die Tests laufen, aber ich frage mich immer noch, wenn es eine bessere Lösung ist
find <dir> -type d -exec go test {} \;
Vielleicht ist das kein Go-Problem, sondern ein Testproblem. Tests sollten keinen globalen Status haben (wie eine Verbindung zu einer Datenbank) und sollten daher in der Lage sein, parallel zu laufen. – ahofmann
Nun, wie soll man dann eine API testen, die auf einem DB basiert? Alles zu verspotten würde den Testzweck einfach besiegen. –
Ich bin kein Fan des globalen Teststatus, aber ich sehe hier keine andere Möglichkeit. –