Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menguji Senario `os.Exit` dalam Pergi Tanpa Mengganggu Suite Ujian?

Bagaimana untuk Menguji Senario `os.Exit` dalam Pergi Tanpa Mengganggu Suite Ujian?

Susan Sarandon
Susan Sarandonasal
2024-11-12 17:08:02678semak imbas

How to Test `os.Exit` Scenarios in Go Without Disrupting the Test Suite?

Senario Keluar Ujian Unit dalam Go

Meliputi pelbagai senario ujian adalah penting untuk pembangunan perisian yang mantap. Dalam Go, menguji fungsi yang memanggil os.Exit memberikan cabaran yang unik. Bagaimanakah kami boleh menguji senario keluar tanpa mengganggu keseluruhan suite ujian?

Pertimbangkan fungsi berikut, ditakdirkan:

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

Untuk menguji dengan berkesan bahawa penggunaan fungsi ini mencetuskan keluar, anda akan perlu menggunakan strategi yang mengehadkan os.Keluar panggilan dalam ujian dan menghalangnya daripada menjejaskan orang lain ujian.

Menguji os.Keluar

Andrew Gerrand, ahli teras pasukan Go, memberikan pendekatan yang bijak untuk masalah ini dalam pembentangannya. Mari kita laksanakan penyelesaian ini:

main.go (Program dengan fungsi yang akan diuji)

package main

import (
    "fmt"
    "os"
)

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

main_test.go (Ujian untuk Crasher fungsi)

package main

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

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

    // Invoke the test again with "BE_CRASHER=1" to trigger the Crasher call.
    cmd := exec.Command(os.Args[0], "-test.run=TestCrasher")
    cmd.Env = append(os.Environ(), "BE_CRASHER=1")
    err := cmd.Run()

    // Validate exit code.
    if e, ok := err.(*exec.ExitError); ok && !e.Success() {
        return
    }
    t.Fatalf("process ran with err %v, want exit status 1", err)
}

Pelaksanaan:

Penyelesaian ini berfungsi dengan:

  • Menggunakan ujian go sekali lagi dalam proses yang berasingan melalui exec.Command, mengehadkan pelaksanaan kepada ujian TestCrasher.
  • Melalui bendera melalui pembolehubah persekitaran (BE_CRASHER=1) untuk mengawal gelagat seruan kedua.
  • Menyemak bendera dan, jika ditetapkan, memanggil Crasher dan keluar serta-merta.
  • Mengesahkan kod keluar untuk memastikan bahawa ujian itu lulus seperti yang dijangkakan.

Menggunakan pendekatan ini, anda yakin boleh menguji senario keluar dalam Go without mengganggu seluruh suite ujian anda.

Atas ialah kandungan terperinci Bagaimana untuk Menguji Senario `os.Exit` dalam Pergi Tanpa Mengganggu Suite Ujian?. 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