Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menguji Fungsi Go Dengan Berkesan Menggunakan `log.Fatal()`?

Bagaimana untuk Menguji Fungsi Go Dengan Berkesan Menggunakan `log.Fatal()`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-09 10:59:11867semak imbas

How to Effectively Test Go Functions Using `log.Fatal()`?

Menguji Fungsi Go yang Mengandungi log.Fatal()

Pertimbangkan senario di mana anda mempunyai fungsi Go menggunakan log.Fatal() untuk mencetak mesej. Menguji fungsi sedemikian boleh mencabar kerana log.Fatal() mencetuskan os.Exit(1), menyebabkan kegagalan ujian.

Pendekatan:

Untuk mengatasi cabaran ini, ia perlu dinasihatkan untuk melaksanakan pembalak tersuai yang mengubah hala output ke destinasi log.xxx() standard mereka. Walau bagaimanapun, semasa ujian, anda boleh menukar fungsi seperti log.Fatalf() dengan mudah dengan pelaksanaan anda sendiri yang tidak menggunakan os.Exit(1).

Contoh:

Katakan kita mempunyai kod berikut yang mencetak log:

package main

import (
    "log"
)

func hello() {
    log.Print("Hello!")
}

func goodbye() {
    log.Fatal("Goodbye!")
}

func init() {
    log.SetFlags(0)
}

func main() {
    hello()
    goodbye()
}

Untuk menguji kod ini, kita boleh merumuskan ujian hipotesis:

package main

import (
    "bytes"
    "log"
    "testing"
)


func TestHello(t *testing.T) {
    var buf bytes.Buffer
    log.SetOutput(&buf)

    hello()

    wantMsg := "Hello!\n"
    msg := buf.String()
    if msg != wantMsg {
        t.Errorf("%#v, wanted %#v", msg, wantMsg)
    }
}

func TestGoodby(t *testing.T) {
    var buf bytes.Buffer
    log.SetOutput(&buf)

    goodbye()

    wantMsg := "Goodbye!\n"
    msg := buf.String()
    if msg != wantMsg {
        t.Errorf("%#v, wanted %#v", msg, wantMsg)
    }
}

Nota:

Pendekatan ini memberikan fleksibiliti dalam menggantikan fungsi logger tertentu semasa ujian, membenarkan penyesuaian tingkah laku tanpa menjejaskan kefungsian fungsi asal sedang diuji.

Atas ialah kandungan terperinci Bagaimana untuk Menguji Fungsi Go Dengan Berkesan Menggunakan `log.Fatal()`?. 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