Rumah > pembangunan bahagian belakang > Golang > ## Bagaimana untuk Mencapai Liputan Lengkap dalam Ujian Fungsian: Merapatkan Jurang Antara Kod dan Pelaksanaan?

## Bagaimana untuk Mencapai Liputan Lengkap dalam Ujian Fungsian: Merapatkan Jurang Antara Kod dan Pelaksanaan?

Susan Sarandon
Lepaskan: 2024-10-25 18:43:02
asal
337 orang telah melayarinya

## How to Achieve Complete Coverage in Functional Tests: Bridging the Gap Between Code and Execution?

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

Penyelesaian:

1. Kecualikan Fungsi Utama Menggunakan Teg Binaan:

<code class="go">//+build !test

package main

func main() {
    os.Exit(doFunc());
}</code>
Salin selepas log masuk

Bina dengan teg:

go test -c -coverpkg=. -o example -tags test
Salin selepas log masuk

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

Faedah:

  • Tompok buta yang ditemui dalam liputan ujian berfungsi
  • Meningkatkan kebolehujian dan kebolehselenggaraan kod pengeluaran
  • Keyakinan terhadap ketepatan dan kesempurnaan laporan liputan

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!

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