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

Patricia Arquette
Freigeben: 2024-10-27 05:20:03
Original
766 Leute haben es durchsucht

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>
Nach dem Login kopieren

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

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

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!