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

Bagaimana untuk Menangkap dan Mengesahkan Output Log dalam Ujian Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-16 16:48:03955semak imbas

How to Capture and Verify Log Output in Go Tests?

Mengakses Log dalam Go Tests

Dalam ujian Go, mengesahkan output log fungsi boleh menjadi mencabar, terutamanya apabila fungsi itu sendiri log ralat secara langsung.

Untuk menangkap output log, penyelesaian biasa ialah mengubah hala output log lalai ke penimbal sebelum melaksanakan fungsi yang sedang diuji.

Contoh:

Pertimbangkan fungsi readByte berikut:

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

Untuk menguji output log, kita boleh menggunakan pendekatan berikut dalam fail ujian:

package main

import (
    "bytes"
    "testing"

    "github.com/stretchr/testify/assert"
)

func TestReadByte(t *testing.T) {
    var buf bytes.Buffer
    log.SetOutput(&buf)
    defer func() {
        log.SetOutput(os.Stderr)
    }()
    readByte()
    output := buf.String()
    assert.Contains(t, output, "Couldn't read first byte")
}

Dalam contoh ini , kita:

  • Buat penimbal untuk menangkap output log.
  • Ubah hala output log lalai ke penimbal menggunakan log.SetOutput(&buf).
  • Laksanakan fungsi readByte.
  • Pulihkan output log lalai kepada os.Stderr menggunakan defer func() untuk mengelakkan menjejaskan ujian berikutnya.
  • Tegaskan mesej log yang dijangka menggunakan testimoni/assert.

Atas ialah kandungan terperinci Bagaimana untuk Menangkap dan Mengesahkan Output 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