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
Lepaskan: 2024-12-09 10:59:11
asal
867 orang telah melayarinya

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

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

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!

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