Rumah  >  Artikel  >  pembangunan bahagian belakang  >  ## 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
Susan Sarandonasal
2024-10-25 18:43:02157semak imbas

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

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:

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