Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menguji Fungsi yang Memanggil os.Exit() dalam Go?

Bagaimana untuk Menguji Fungsi yang Memanggil os.Exit() dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-18 01:41:02545semak imbas

How to Test Functions That Call os.Exit() in Go?

Menguji os.Exit Senario dalam Go

Apabila menulis ujian yang melibatkan fungsi panggilan yang keluar dari program menggunakan os.Exit(), ia menjadi perlu untuk mengasingkan kesannya pada keseluruhan suite ujian. Untuk menangani cabaran ini, kami boleh memanfaatkan pendekatan berikut yang diilhamkan oleh pembentangan oleh Andrew Gerrand, ahli pasukan teras Go.

Diberikan fungsi yang menamatkan program melalui os.Exit():

package main

import (
    "fmt"
    "os"
)

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

Buat kes ujian yang sepadan:

package main

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

func TestCrasher(t *testing.T) {
    // Check if the BE_CRASHER environment variable is set to 1.
    if os.Getenv("BE_CRASHER") == "1" {
        Crasher()
        return
    }

    // Construct a command to re-run the test binary, limiting its execution to TestCrasher.
    cmd := exec.Command(os.Args[0], "-test.run=TestCrasher")
    // Set additional environment variables.
    cmd.Env = append(os.Environ(), "BE_CRASHER=1")

    // Execute the command.
    err := cmd.Run()
    // Verify the exit status of the command.
    if e, ok := err.(*exec.ExitError); ok && !e.Success() {
        return
    }

    // Report failure if the command ran with an unexpected exit code.
    t.Fatalf("process ran with err %v, want exit status 1", err)
}

Kes ujian ini menggunakan semula ujian go dalam proses yang berasingan, mengasingkan pelaksanaan TestCrasher daripada suite yang lain. Ia juga menetapkan pembolehubah persekitaran (BE_CRASHER=1) yang disemak oleh proses yang dipanggil dan, jika ada, memanggil fungsi yang sedang diuji. Oleh itu, kami mengelakkan gelung tak terhingga dan memastikan kod keluar yang betul disahkan.

Atas ialah kandungan terperinci Bagaimana untuk Menguji Fungsi yang Memanggil os.Exit() dalam Go?. 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