Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Ujian Gagal Apabila Berjalan Merentasi Pelbagai Pakej dalam Pergi Walaupun Menggunakan `-selari 1`?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-04 05:53:29620semak imbas

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>

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

  • 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>

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!

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