>  기사  >  백엔드 개발  >  Stdin에서 읽고 Stdout에 쓰는 Go 코드를 테스트하는 방법은 무엇입니까?

Stdin에서 읽고 Stdout에 쓰는 Go 코드를 테스트하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-27 05:20:03858검색

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 함수를 호출하여 판독기와 기록기를 전달합니다. 마지막으로 출력을 예상 결과와 비교합니다.

위 내용은 Stdin에서 읽고 Stdout에 쓰는 Go 코드를 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.