Heim > Artikel > Backend-Entwicklung > Wie teste ich Go-Code, der von Stdin liest und in Stdout schreibt?
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!