Bagaimana untuk Menguji Aplikasi Go yang Dibaca daripada Stdin?

Patricia Arquette
Lepaskan: 2024-10-26 13:27:30
asal
752 orang telah melayarinya

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

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!