为写入 Stdin 的代码编写 Go 测试
为从 stdin 读取并将其回显到 stdout 的代码编写 Go 测试,建议将功能隔离到一个单独的函数中,该函数以 io.Reader 和 io.Writer 作为参数。
不要直接使用 stdin 和 stdout 执行主函数中的所有操作,您的代码应该定义用于此特定目的的函数。例如:
<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>
在主函数中,您可以调用 echo 函数:
<code class="go">func main() { echo(os.Stdin, os.Stdout) }</code>
要测试此函数,您可以创建如下测试:
<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>
此测试根据指定的输入字符串创建一个缓冲读取器和一个缓冲写入器来捕获输出。然后它调用 echo 函数,传入 reader 和 writer。最后,它将输出与预期结果进行比较。
以上是如何测试从 Stdin 读取并写入 Stdout 的 Go 代码?的详细内容。更多信息请关注PHP中文网其他相关文章!