首页 >后端开发 >Golang >如何测试从 Stdin 读取并写入 Stdout 的 Go 代码?

如何测试从 Stdin 读取并写入 Stdout 的 Go 代码?

Patricia Arquette
Patricia Arquette原创
2024-10-27 05:20:03895浏览

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

为写入 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn