Maison > Article > développement back-end > Comment tester les applications Go qui lisent depuis Stdin ?
Test des applications Go avec entrée Stdin
Dans Go, tester des applications qui lisent à partir de stdin peut être difficile. Considérons une application simple qui fait écho à l'entrée stdin sur stdout. Bien que cela puisse paraître simple, l'écriture d'un scénario de test qui vérifie le résultat peut poser des difficultés.
Tentative échouée
Une première approche consisterait à simuler stdin et stdout à l'aide de tuyaux. et écrivez manuellement dans le tube stdin. Cependant, cela peut entraîner des conditions de concurrence critique et des échecs inattendus.
Solution : extraire la logique et tester la fonction indépendante
Au lieu d'effectuer toutes les opérations dans la fonction principale à l'aide de stdin et stdout, créez une fonction distincte qui accepte io.Reader et io.Writer comme paramètres. Cette approche permet à la fonction principale d'appeler la fonction tandis que la fonction de test la teste directement.
Code refactorisé
<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>
Cas de test mis à jour
<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>
Ce scénario de test simule la fonction principale en appelant directement la fonction Echo avec un tampon pour l'entrée stdin et un tampon pour capturer la sortie. La sortie capturée est ensuite comparée à l'entrée attendue, garantissant que la fonction fait correctement écho à l'entrée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!