Rumah >pembangunan bahagian belakang >Golang >## Bagaimana untuk Mencapai Liputan Lengkap dalam Ujian Fungsian: Merapatkan Jurang Antara Kod dan Pelaksanaan?
Cara Menunjukkan Liputan Lengkap dalam Ujian Fungsian
Masalah:
Ujian fungsian dilaksanakan disusun kod binari, meninggalkan ruang untuk bintik buta yang tidak bertutup.
Coretan Kod:
<code class="go">package main import ( "fmt" "math/rand" "os" "time" ) var exitCode int func Test_main(t *testing.T) { go main() exitCode = <-exitCh } func TestMain(m *testing.M) { m.Run() // can exit because cover profile is already written os.Exit(exitCode) } func main() { rand.Seed(time.Now().UTC().UnixNano()) for { i := rand.Int() fmt.Println(i) if i%3 == 0 { os.Exit(0) } if i%2 == 0 { os.Exit(1) } time.Sleep(time.Second) } }</code>
Penyelesaian:
1. Kecualikan Fungsi Utama Menggunakan Teg Binaan:
<code class="go">//+build !test package main func main() { os.Exit(doFunc()); }</code>
Bina dengan teg:
go test -c -coverpkg=. -o example -tags test
2. Ekstrak Fungsi kepada Kod Boleh Diuji:
Elakkan menguji fungsi utama dengan mengekstrak fungsi ke dalam kelas lain. Gunakan func TestMain untuk mengawal pelaksanaan kod pada urutan utama.
3. Gunakan Mocking:
Buat olok-olok untuk kebergantungan untuk mengasingkan laluan kod tertentu dan meningkatkan kebolehujian.
4. Tamat Masa untuk Liputan:
Tambahkan tamat masa pada ujian untuk memberi masa kepada alat liputan untuk menulis profil sebelum permohonan keluar.
Contoh dengan Tamat Masa:
<code class="go">func exit(code int) { exitCh <- code time.Sleep(1 * time.Second) // Allow time for coverage data to be written os.Exit(code) }</code>
Faedah:
Atas ialah kandungan terperinci ## Bagaimana untuk Mencapai Liputan Lengkap dalam Ujian Fungsian: Merapatkan Jurang Antara Kod dan Pelaksanaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!