Wie kann ich die gesamte Test-Setup-Verarbeitung durchführen, die die Grundlage für alle Tests bei Verwendung des Testpakets bildet ?
Als Beispiel in Nunit gibt es ein [SetUp]
Attribut.
[TestFixture]
public class SuccessTests
{
[SetUp] public void Init()
{ /* Load test data */ }
}
unit-testing
go
miltonb
quelle
quelle
Antworten:
Ab Go 1.4 können Sie Setup / Teardown implementieren (Sie müssen Ihre Funktionen nicht vor / nach jedem Test kopieren). Die Dokumentation wird skizziert hier im Hauptteil:
Ich habe einige Zeit gebraucht, um herauszufinden, dass dies bedeutet, dass wenn ein Test eine Funktion enthält,
func TestMain(m *testing.M)
diese Funktion aufgerufen wird, anstatt den Test auszuführen . Und in dieser Funktion kann ich definieren, wie die Tests ausgeführt werden. Zum Beispiel kann ich globales Setup und Teardown implementieren:Einige andere Beispiele finden Sie hier .
quelle
TestMain
ist einmal in einem Paket, also ist es nicht so nützlich. Ich finde, Untertests sind besser für komplexere Zwecke.lstat $GOROOT/subtests: no such file or directory
Dies kann erreicht werden, indem eine
init()
Funktion in die_test.go
Datei eingefügt wird. Dies wird vor derinit()
Funktion ausgeführt.Die Datei _test.init () wird vor der Funktion package init () aufgerufen.
quelle
[TestFixtureSetUp]
Attributs .Angesichts einer einfachen Funktion zum Unit-Test:
Sie können es mit einer Setup-Funktion testen, die die Teardown-Funktion zurückgibt. Und nach dem Aufruf von setup () können Sie einen verzögerten Aufruf von teardown () durchführen.
Das Go-Test-Tool meldet die Protokollierungsanweisungen in der Shell-Konsole:
Mit diesem Ansatz können Sie einige zusätzliche Parameter an Setup / Teardown übergeben.
quelle
In der Regel werden Tests in go nicht im gleichen Stil wie in anderen Sprachen geschrieben. Oft gibt es relativ weniger Testfunktionen, aber jede enthält eine tabellengesteuerte Reihe von Testfällen. Sehen diesen Artikel, der von einem der Go-Teams geschrieben wurde.
Bei einem tabellengesteuerten Test setzen Sie einfach einen beliebigen Setup-Code vor die Schleife, die die einzelnen in der Tabelle angegebenen Testfälle ausführt, und fügen anschließend einen Bereinigungscode ein.
Wenn Sie noch gemeinsam genutzten Setup-Code zwischen Testfunktionen haben, können Sie den gemeinsam genutzten Setup-Code in eine Funktion extrahieren und a verwenden,
sync.Once
wenn es wichtig ist, dass er genau einmal ausgeführt wird (oder, wie eine andere Antwort vorschlägt, verwendeninit()
, dies hat jedoch den Nachteil, dass das Setup wird auch dann ausgeführt, wenn die Testfälle nicht ausgeführt werden (möglicherweise, weil Sie die Testfälle mithilfe von eingeschränkt habengo test -run <regexp>
.)Ich würde sagen, wenn Sie der Meinung sind, dass Sie ein gemeinsames Setup zwischen verschiedenen Tests benötigen, das genau einmal ausgeführt wird, sollten Sie überlegen, ob Sie es wirklich benötigen und ob ein tabellengesteuerter Test nicht besser wäre.
quelle
Das Go-Test-Framework hat nichts, was dem SetUp-Attribut von NUnit entspricht (das eine Funktion markiert, die vor jedem Test in der Suite aufgerufen werden soll). Es gibt jedoch einige Optionen:
Rufen Sie einfach Ihre
SetUp
Funktion von jedem Test aus auf, wo sie benötigt wird.Verwenden Sie eine Erweiterung des Testframeworks von Go, die xUnit-Paradigmen und -Konzepte implementiert. Drei starke Optionen kommen in den Sinn:
Jede dieser Bibliotheken empfiehlt Ihnen, Ihre Tests in Suites / Fixtures zu organisieren, die anderen xUnit-Frameworks ähneln, und ruft die Setup-Methoden für den Suite- / Fixture-Typ vor jeder der
Test*
Methoden auf.quelle
Schamloser Plug, ich habe https://github.com/houqp/gtest erstellt , um genau dieses Problem zu lösen.
Hier ist ein kurzes Beispiel:
Sie können mit jeder von ihnen eine beliebige Testgruppe innerhalb eines Pakets erstellen, indem Sie unterschiedliche Setup- / Teardown-Routinen verwenden.
quelle