Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Anda Menguji Gelagat `os.Exit` dalam Go Test Suites?

Bagaimana Anda Menguji Gelagat `os.Exit` dalam Go Test Suites?

Barbara Streisand
Barbara Streisandasal
2024-11-11 17:35:03908semak imbas

How Do You Test `os.Exit` Behavior in Go Test Suites?

Menguji senario os.Exit dalam Go

Apabila menguji fungsi Go yang menggunakan os.Exit(), pendekatan unik diperlukan untuk menghalang keluar ini daripada mengganggu ujian seterusnya.

Untuk menangani perkara ini, pertimbangkan kod berikut:

func doomed() {
  os.Exit(1)
}

Cara Menguji os.Exit Gelagat Menggunakan Go Test

Untuk menguji tingkah laku keluar dari fungsi ini, kami boleh memanfaatkan teknik yang digariskan oleh Andrew Gerrand, ahli teras pasukan Go:

  1. Buat Proses Berasingan untuk Pengujian :
    Gunakan ujian go sekali lagi dalam proses berasingan menggunakan exec.Command. Hadkan pelaksanaan kepada ujian yang mencetuskan os.Exit.
  2. Lulus Pembolehubah Persekitaran:
    Tetapkan pembolehubah persekitaran (cth., BE_CRASHER=1) dalam subproses. Fungsi yang diuji boleh menyemak pembolehubah ini dan memanggil os.Keluar hanya jika ditetapkan.
  3. Sahkan Kod Keluar:
    Setelah subproses keluar, sahkan kod keluar dalam ujian asal proses. Jika ia sepadan dengan nilai yang dijangkakan (cth., 1), ujian telah berjaya.

Contoh Kod Ujian:

package main

import (
    "fmt"
    "os"
    "os/exec"
    "testing"
)

func Crasher() {
    fmt.Println("Going down in flames!")
    os.Exit(1)
}

func TestCrasher(t *testing.T) {
    if os.Getenv("BE_CRASHER") == "1" {
        Crasher()
        return
    }
    cmd := exec.Command(os.Args[0], "-test.run=TestCrasher")
    cmd.Env = append(os.Environ(), "BE_CRASHER=1")
    err := cmd.Run()
    if e, ok := err.(*exec.ExitError); ok && !e.Success() {
        return
    }
    t.Fatalf("process ran with err %v, want exit status 1", err)
}

Dengan memisahkan proses ujian dan menggunakan pembolehubah persekitaran untuk mengawal pelaksanaan, anda boleh menguji os.Keluar senario dengan berkesan dalam suite ujian Go anda tanpa menjejaskan ujian lain.

Atas ialah kandungan terperinci Bagaimana Anda Menguji Gelagat `os.Exit` dalam Go Test Suites?. 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