Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menguji Fungsi Go yang Menggunakan log.Fatal() dengan Berkesan?

Bagaimanakah Saya Boleh Menguji Fungsi Go yang Menggunakan log.Fatal() dengan Berkesan?

DDD
Lepaskan: 2024-12-10 14:47:12
asal
138 orang telah melayarinya

How Can I Effectively Test Go Functions That Use log.Fatal()?

Menguji Fungsi Go dengan log.Fatal()

Adalah perkara biasa dalam aplikasi Go untuk menggunakan log.Fatal() untuk log ralat kritikal dan kemudian segera menamatkan program. Walaupun tingkah laku ini berguna dalam persekitaran pengeluaran, ia menimbulkan cabaran semasa ujian. Begini cara anda boleh mengatasi cabaran ini:

Pelog Tersuai untuk Pengujian

Satu pendekatan ialah melaksanakan pengelog tersuai yang mengubah hala mesej log ke penimbal yang dipratentukan. Ini membolehkan anda menguji kefungsian pengelogan tanpa perlu program ditamatkan kerana log.Fatal().

// logger.go contains a testing logger that implements *log.Logger
type TestingLogger struct {
    b bytes.Buffer
}

// Println implements log.Print methods, writing to a buffer instead of stdout.
func (l *TestingLogger) Println(args ...interface{}) {
    l.b.WriteString(fmt.Sprintln(args...))
}

// String returns the buffered log messages.
func (l *TestingLogger) String() string {
    return l.b.String()
}
Salin selepas log masuk

Contoh Ujian

Dengan pembalak tersuai di tempatnya, anda boleh meneruskan dengan menguji kefungsian pengelogan seperti berikut:

package main

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

// Set up the custom logger for testing.
var logger = &logger.TestingLogger{}

func init() {
    log.SetOutput(logger)
}

func TestGoodbye(t *testing.T) {
    // Call the function to be tested.
    log.Fatal("Goodbye!")

    // Verify the expected log message was written to the buffer.
    wantMsg := "Goodbye!\n"
    if logger.String() != wantMsg {
        t.Errorf("Expected: %s, Got: %s", wantMsg, logger.String())
    }
}
Salin selepas log masuk

Dengan memisahkan fungsi pengelogan daripada penamatan program dan menangkap mesej log dalam penimbal, anda boleh menguji mana-mana kod yang menggunakan log.Fatal() dengan berkesan tanpa menyebabkan ujian gagal.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguji Fungsi Go yang Menggunakan log.Fatal() dengan Berkesan?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan