Maison > développement back-end > Golang > Comment tester les applications Go qui lisent depuis Stdin ?

Comment tester les applications Go qui lisent depuis Stdin ?

Patricia Arquette
Libérer: 2024-10-26 13:27:30
original
832 Les gens l'ont consulté

How to Test Go Applications That Read from 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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal