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

Barbara Streisand
Lepaskan: 2024-11-11 17:35:03
asal
900 orang telah melayarinya

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

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

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!

sumber:php.cn
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