Mengapa Ujian Gagal Apabila Berjalan Merentasi Pelbagai Pakej dalam Pergi Walaupun Menggunakan `-selari 1`?

Mary-Kate Olsen
Lepaskan: 2024-11-04 05:53:29
asal
619 orang telah melayarinya

Why Do Tests Fail When Running Across Multiple Packages in Go Despite Using `-parallel 1`?

Isu Concurrency Timbul Apabila Menjalankan Ujian Merentasi Pelbagai Pakej dalam Go

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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):

  • Gunakan ujian flag go tanpa dokumen -p 1, yang membina dan menguji semua pakej secara berurutan.

Pilihan 2 (Berasaskan Shell):

  • Tiru kefungsian go test ./... sambil menguatkuasakan ujian berjujukan menggunakan shell.

Bash Command:

<code class="bash">find . -name '*.go' -printf '%h\n' | sort -u | xargs -n1 -P1 go test</code>
Salin selepas log masuk

Fungsi Alias ​​(gotest):

<code class="bash">function gotest(){   find  -name '*.go' -printf '%h\n' | sort -u | xargs -n1 -P1 go test; }</code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!