Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menguji Aplikasi Go yang Dibaca daripada Stdin?

Bagaimana untuk Menguji Aplikasi Go yang Dibaca daripada Stdin?

Patricia Arquette
Patricia Arquetteasal
2024-10-26 13:27:30744semak imbas

How to Test Go Applications That Read from Stdin?

Menguji Aplikasi Go dengan Input Stdin

Dalam Go, menguji aplikasi yang membaca daripada stdin boleh menjadi mencabar. Pertimbangkan aplikasi mudah yang menggemakan input stdin ke stdout. Walaupun ia kelihatan mudah, menulis kes ujian yang mengesahkan output boleh menimbulkan kesukaran.

Percubaan Gagal

Pendekatan awal adalah untuk mensimulasikan stdin dan stdout menggunakan paip dan tulis secara manual ke paip stdin. Walau bagaimanapun, ini mungkin membawa kepada keadaan perlumbaan dan kegagalan yang tidak dijangka.

Penyelesaian: Ekstrak Logik dan Fungsi Bebas Ujian

Daripada melaksanakan semua operasi dalam fungsi utama menggunakan stdin dan stdout, buat fungsi berasingan yang menerima io.Reader dan io.Writer sebagai parameter. Pendekatan ini membenarkan fungsi utama untuk memanggil fungsi sementara fungsi ujian mengujinya secara langsung.

Kod Refactored

<code class="go">package main

import (
    "bufio"
    "fmt"
    "io"
)

// Echo takes an io.Reader and an io.Writer and echoes input to output.
func Echo(r io.Reader, w io.Writer) {
    reader := bufio.NewReader(r)
    for {
        fmt.Print("> ")
        bytes, _, _ := reader.ReadLine()
        if bytes == nil {
            break
        }
        fmt.Fprintln(w, string(bytes))
    }
}

func main() {
    Echo(os.Stdin, os.Stdout)
}</code>

Kes Ujian Kemas Kini

<code class="go">package main

import (
    "bufio"
    "bytes"
    "io"
    "os"
    "testing"
)

func TestEcho(t *testing.T) {
    input := "abc\n"
    reader := bytes.NewBufferString(input)
    writer := &bytes.Buffer{}

    Echo(reader, writer)

    actual := writer.String()
    if actual != input {
        t.Errorf("Wanted: %v, Got: %v", input, actual)
    }
}</code>

Kes ujian ini mensimulasikan fungsi utama dengan memanggil fungsi Echo terus dengan penimbal untuk input stdin dan penimbal untuk menangkap output. Output yang ditangkap kemudiannya dibandingkan dengan input yang dijangkakan, memastikan fungsi itu menggemakan input dengan betul.

Atas ialah kandungan terperinci Bagaimana untuk Menguji Aplikasi Go yang Dibaca daripada Stdin?. 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