Maison >développement back-end >Golang >Comment tester le code Go qui lit depuis Stdin et écrit sur Stdout ?

Comment tester le code Go qui lit depuis Stdin et écrit sur Stdout ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-27 05:20:03895parcourir

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

Écrire des tests Go pour le code qui écrit sur Stdin

Pour écrire un test Go pour le code qui lit depuis stdin et le renvoie sur stdout , il est conseillé d'isoler la fonctionnalité dans une fonction distincte qui prend un io.Reader et un io.Writer comme paramètres.

Au lieu d'effectuer toutes les opérations dans la fonction principale en utilisant directement stdin et stdout, votre code doit définir une fonction à cet effet spécifique. Par exemple :

<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>

Au sein de votre fonction principale, vous pouvez ensuite appeler la fonction echo :

<code class="go">func main() {
    echo(os.Stdin, os.Stdout)
}</code>

Pour tester cette fonction, vous pouvez créer un test comme celui-ci :

<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>

Ce test crée un lecteur tamponné à partir de la chaîne d'entrée spécifiée et un écrivain tamponné pour capturer la sortie. Il appelle ensuite la fonction echo, en passant le lecteur et l'écrivain. Enfin, il compare le résultat avec le résultat attendu.

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!

Déclaration:
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