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
Libérer: 2024-10-27 05:20:03
original
882 Les gens l'ont consulté

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

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

<code class="go">func main() {
    echo(os.Stdin, os.Stdout)
}</code>
Copier après la connexion

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

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!

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