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