Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menangkap dan Memeriksa Log dalam Ujian Go?

Bagaimana untuk Menangkap dan Memeriksa Log dalam Ujian Go?

Barbara Streisand
Barbara Streisandasal
2024-11-21 02:18:11382semak imbas

How to Capture and Inspect Logs in Go Tests?

Menangkap dan Memeriksa Log dalam Ujian Go

Untuk mengesahkan log yang dijana oleh fungsi yang sedang diuji, adalah penting untuk menangkap dan memeriksanya. Ini boleh dicapai dengan mengubah hala output dan membandingkannya dengan nilai yang dijangkakan.

Dalam contoh yang disediakan, fungsi readByte mencetak mesej log ke output standard. Untuk menangkap mesej ini dalam ujian, kita boleh menggunakan bait. Penampan seperti yang ditunjukkan di bawah:

package main

import (
    "bytes"
    "fmt"
    "io"
    "log"
    "os"
    "testing"
)

func readByte(/*...*/) {
    // ...
    if err != nil {
        fmt.Println("ERROR")
        log.Print("Couldn't read first byte")
        return
    }
    // ...
}

func TestReadByte(t *testing.T) {
    var buf bytes.Buffer
    log.SetOutput(&buf)
    defer func() {
        log.SetOutput(os.Stderr)
    }()
    readByte()
    t.Log(buf.String())
}

Penjelasan:

  • Log.SetOutput( baris &buf) mengubah hala keluaran log kepada pembolehubah buf.
  • Tangguhan log.SetOutput(os.Stderr) memastikan bahawa output log dipulihkan ke destinasi asalnya selepas ujian dijalankan.
  • Baris t.Log(buf.String()) mencetak log yang ditangkap ke log ujian .

Dengan memeriksa kandungan buf, anda boleh mengesahkan sama ada log yang dijangka dijana oleh fungsi readByte. Pendekatan ini membolehkan anda menguji output log tanpa mengubah suai kod fungsi yang sedang diuji.

Atas ialah kandungan terperinci Bagaimana untuk Menangkap dan Memeriksa Log dalam Ujian 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