Stdin 입력으로 Go 애플리케이션 테스트
Go에서는 stdin에서 읽는 애플리케이션을 테스트하는 것이 어려울 수 있습니다. stdin 입력을 stdout으로 에코하는 간단한 애플리케이션을 생각해 보세요. 간단해 보일 수도 있지만 출력을 확인하는 테스트 사례를 작성하는 것은 어려울 수 있습니다.
실패한 시도
초기 접근 방식은 파이프를 사용하여 stdin 및 stdout을 시뮬레이션하는 것입니다. stdin 파이프에 수동으로 씁니다. 그러나 이는 경쟁 조건 및 예상치 못한 오류로 이어질 수 있습니다.
해결책: 논리 추출 및 독립 함수 테스트
stdin 및 stdout에서 io.Reader 및 io.Writer를 매개변수로 받아들이는 별도의 함수를 만듭니다. 이 접근 방식을 사용하면 테스트 함수가 함수를 직접 테스트하는 동안 기본 함수가 함수를 호출할 수 있습니다.
리팩터링된 코드
<code class="go">package main import ( "bufio" "fmt" "io" ) // Echo takes an io.Reader and an io.Writer and echoes input to output. func Echo(r io.Reader, w io.Writer) { reader := bufio.NewReader(r) for { fmt.Print("> ") bytes, _, _ := reader.ReadLine() if bytes == nil { break } fmt.Fprintln(w, string(bytes)) } } func main() { Echo(os.Stdin, os.Stdout) }</code>
업데이트된 테스트 사례
<code class="go">package main import ( "bufio" "bytes" "io" "os" "testing" ) func TestEcho(t *testing.T) { input := "abc\n" reader := bytes.NewBufferString(input) writer := &bytes.Buffer{} Echo(reader, writer) actual := writer.String() if actual != input { t.Errorf("Wanted: %v, Got: %v", input, actual) } }</code>
이 테스트 사례는 표준 입력 입력용 버퍼와 출력 캡처용 버퍼를 사용하여 Echo 함수를 직접 호출하여 기본 함수를 시뮬레이션합니다. 그런 다음 캡처된 출력을 예상 입력과 비교하여 함수가 입력을 올바르게 에코하는지 확인합니다.
위 내용은 Stdin에서 읽는 Go 애플리케이션을 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!