Apabila bekerja dengan berbilang pakej yang disimpan di bawah subdirektori dalam direktori src/, melaksanakan ujian untuk setiap pakej secara individu menggunakan ujian go biasanya berjaya. Walau bagaimanapun, apabila cuba menjalankan semua ujian secara kolektif menggunakan ujian go ./..., isu timbul.
Ujian dilaksanakan, tetapi akhirnya gagal apabila beroperasi terhadap pelayan pangkalan data tempatan disebabkan perbalahan antara ujian. Walaupun menetapkan -parallel 1 untuk mengelakkan perbalahan pangkalan data, ujian masih gagal. Ini mencadangkan masalah dengan penjujukan ujian.
Setiap fail ujian mengandungi dua pembolehubah global:
<code class="go">var session *mgo.Session var db *mgo.Database</code>
Selain itu, ia menggunakan fungsi persediaan dan teardown berikut:
<code class="go">func setUp() { s, err := cfg.GetDBSession() if err != nil { panic(err) } session = s db = cfg.GetDB(session) db.DropDatabase() } func tearDown() { db.DropDatabase() session.Close() }</code>
Setiap ujian bermula dengan setUp() dan berakhir dengan tearDown(). cfg ditakrifkan seperti berikut:
<code class="go">package cfg import ( "labix.org/v2/mgo" ) func GetDBSession() (*mgo.Session, error) { session, err := mgo.Dial("localhost") return session, err } func GetDB(session *mgo.Session) *mgo.Database { return session.DB("test_db") }</code>
Setelah mengubah suai cfg untuk menggunakan pangkalan data rawak, ujian lulus dengan jayanya. Pemerhatian ini membayangkan bahawa ujian daripada berbilang pakej berjalan secara serentak.
Penyelesaian Kemungkinan:
Pilihan 1 (Tidak didokumenkan):
Pilihan 2 (Berasaskan Shell):
Bash Command:
<code class="bash">find . -name '*.go' -printf '%h\n' | sort -u | xargs -n1 -P1 go test</code>
Fungsi Alias (gotest):
<code class="bash">function gotest(){ find -name '*.go' -printf '%h\n' | sort -u | xargs -n1 -P1 go test; }</code>
Dengan menggunakan gotest ., semua ujian dalam direktori semasa boleh dijalankan secara berurutan.
Atas ialah kandungan terperinci Mengapa Ujian Gagal Apabila Berjalan Merentasi Pelbagai Pakej dalam Pergi Walaupun Menggunakan `-selari 1`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!