Heim  >  Artikel  >  Backend-Entwicklung  >  Wie teste ich Go-Code, der von Stdin liest und in Stdout schreibt?

Wie teste ich Go-Code, der von Stdin liest und in Stdout schreibt?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-27 05:20:03855Durchsuche

How to Test Go Code that Reads from Stdin and Writes to Stdout?

Go-Tests für Code schreiben, der in Stdin schreibt

Um einen Go-Test für Code zu schreiben, der von stdin liest und ihn an stdout zurückgibt , ist es ratsam, die Funktionalität in einer separaten Funktion zu isolieren, die einen io.Reader und einen io.Writer als Parameter akzeptiert.

Anstatt alle Vorgänge in der Hauptfunktion direkt mit stdin und stdout auszuführen, sollte Ihr Code definieren eine Funktion für diesen speziellen Zweck. Zum Beispiel:

<code class="go">func echo(r io.Reader, w io.Writer) {
    reader := bufio.NewReader(r)
    for {
        fmt.Print("> ", w)
        bytes, _, err := reader.ReadLine()
        if err == io.EOF {
            os.Exit(0)
        }
        fmt.Println(string(bytes), w)
    }
}</code>

Innerhalb Ihrer Hauptfunktion können Sie dann die Echo-Funktion aufrufen:

<code class="go">func main() {
    echo(os.Stdin, os.Stdout)
}</code>

Um diese Funktion zu testen, können Sie einen Test wie diesen erstellen:

<code class="go">import (
    "bytes"
    "io"
    "testing"
)

func TestEcho(t *testing.T) {
    input := "abc\n"
    expected := "abc\n"

    r := bytes.NewBufferString(input)
    w := bytes.NewBufferString("")

    echo(r, w)

    if got := w.String(); got != expected {
        t.Errorf("Expected: %v, Got: %v", expected, got)
    }
}</code>

Dieser Test erstellt einen gepufferten Reader aus der angegebenen Eingabezeichenfolge und einen gepufferten Writer, um die Ausgabe zu erfassen. Anschließend ruft es die Echo-Funktion auf und übergibt den Reader und Writer. Abschließend wird die Ausgabe mit dem erwarteten Ergebnis verglichen.

Das obige ist der detaillierte Inhalt vonWie teste ich Go-Code, der von Stdin liest und in Stdout schreibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn