2016-12-03 6 views
0

Ich habe ein Go-Paket mit mehreren Dateien. Als Go-Standard erstelle ich eine zugehörige Testdatei für jede Quelldatei im Paket.Wohin mit freigegebenem Code für Tests in einem Go-Paket?

In meinem Fall verwenden die verschiedenen Tests die gleichen Testhilfefunktionen. Ich möchte nicht, dass diese Funktionen in den Paketquelldateien enthalten sind, da sie nur zu Testzwecken verwendet werden. Ich möchte auch vermeiden, diesen Code in jeder Testdatei zu replizieren.

Wo sollte ich diesen Code zwischen allen Testquelldateien und nicht Teil des Pakets teilen?

+1

Wenn es nur für Tests ist, in jeder '_test.go' Datei. – JimB

Antwort

2

Sie legen es einfach in eine der Testdateien und das ist alles. Testdateien, die dieselbe Paketklausel verwenden, gehören zum selben Testpaket und können sich gegenseitig auf die exportierten und nicht exportierten Identifikatoren ohne jegliche import-Anweisungen beziehen.

Beachten Sie auch, dass Sie keine separate _test.go Datei für jede der .go Dateien erstellen müssen; und Sie können eine xx_test.go Datei haben, ohne eine "passende" xx.go Datei im Paket zu haben.

Zum Beispiel, wenn Sie Paket schreiben a, mit folgenden Dateien:

a/ 
    a.go 
    b.go 
    a_test.go 
    b_test.go 

Für Black-Box-Testen Sie die package a_test Paket Klausel in a_test.go und b_test.go verwenden würde. Mit einem func util() in Datei a_test.go können Sie es auch in b_test.go verwenden.

Wenn Sie White-Box-Test schreiben, würden Sie package a in den Testdateien verwenden, und wieder, können Sie alle Kennungen in a_test.go von b_test.go (und umgekehrt) ohne deklarierte Einfuhren beziehen.

Beachten Sie, dass aber, wenn die Paket-Klauseln in a_test.go und b_test.go nicht übereinstimmen (z a_test.gopackage a verwendet und b_test.go verwendet package a_test), dann werden sie zu verschiedenen Testpakete gehören, und dann können Sie nicht Identifikatoren in einem anderen erklärt verwenden.

Verwandte Themen