Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mencapai profil liputan komprehensif tanpa titik buta untuk ujian berfungsi yang berinteraksi dengan binari Go yang disusun?
Menunjukkan Liputan Ujian Fungsian Tanpa Bintik Buta
Masalah:
Untuk menjana profil liputan untuk ujian berfungsi yang ditulis dalam bahasa bukan-Go yang berinteraksi dengan binari Go yang disusun, fail main_test.go termasuk fungsi Test_main yang mengubah suai kaedah main() untuk menghantar kod keluar ke saluran. Walau bagaimanapun, if flag.Lookup("test.coverprofile") != keadaan tiada dalam fungsi exit() mewujudkan titik buta dalam hasil liputan, kerana os.Exit(kod) tidak boleh dilaksanakan apabila profil liputan diminta .
Penyelesaian:
Untuk menulis profil liputan tanpa titik buta, adalah disyorkan untuk mengecualikan fail main.go daripada ujian. Ini boleh dicapai menggunakan teg binaan dengan menambahkan baris // build !test pada bahagian atas fail main.go. Ini akan mengarahkan pengkompil Go untuk mengabaikan fail semasa pembinaan ujian.
Berikut ialah versi diubah suai bagi contoh kod yang menggabungkan pendekatan ini:
<code class="go">// dofunc.go package main import ( "fmt" "math/rand" "time" ) var seed int64 = time.Now().UTC().UnixNano() func doFunc() int { rand.Seed(seed) var code int for { i := rand.Int() fmt.Println(i) if i%3 == 0 { code = 0 break } if i%2 == 0 { fmt.Println("status 1") code = 1 break } time.Sleep(time.Second) } return code } // main.go //+build !test package main import "os" func main() { os.Exit(doFunc()) } // dofunc_test.go package main import ( "testing" "flag" "os" ) var exitCode int func TestMain(m *testing.M) { flag.Parse() code := m.Run() os.Exit(code) } func TestDoFuncErrorCodeZero(t *testing.T) { seed = 2 if code := doFunc(); code != 0 { t.Fail() } } func TestDoFuncErrorCodeOne(t *testing.T) { seed = 3 if code := doFunc(); code != 1 { t.Fail() } }</code>
Penggunaan:
Dengan mengecualikan main.go daripada ujian, fungsi exit() bukan lagi sebahagian daripada analisis liputan dan profil liputan akan mencerminkan dengan tepat kelakuan ujian berfungsi.
Atas ialah kandungan terperinci Bagaimana untuk mencapai profil liputan komprehensif tanpa titik buta untuk ujian berfungsi yang berinteraksi dengan binari Go yang disusun?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!