Maison >développement back-end >Golang >Comment tester efficacement les interactions stdin/stdout dans les applications Go ?
Test des interactions stdin/stdout dans Go
Lors du développement d'applications qui interagissent avec stdin et stdout, il est crucial de vérifier leur comportement à l'aide de tests. Prenons un exemple simple dans lequel un programme lit des lignes depuis stdin et les renvoie vers stdout.
Scénario de test avec sous-processus
Initialement, un scénario de test a été écrit en utilisant os /exec pour lancer le programme en tant que sous-processus et communiquer avec ses canaux stdin et stdout. Cependant, cette approche a entraîné des échecs de test en raison de l'utilisation directe de stdin et stdout par la fonction principale.
Test de la logique séparément
Pour résoudre ce problème, le code doit être refactorisé pour séparer la gestion stdin/stdout de la logique principale. Une nouvelle fonction peut être définie qui accepte un io.Reader et un io.Writer comme paramètres, représentant stdin et stdout. Cette fonction peut effectuer les opérations souhaitées, telles que la lecture et la mise en écho des lignes.
Cas de test révisé
<code class="go">func TestEcho(t *testing.T) { in := bufio.NewReader(strings.NewReader("abc\n")) out := &bytes.Buffer{} echo(in, out) got := out.String() want := "abc\n" if got != want { t.Errorf("Wanted: %v, Got: %v", want, got) } }</code>
Dans ce cas de test révisé, la fonction d'écho est testée directement. Il fournit une entrée à la fonction à l'aide d'un lecteur de chaîne et capture la sortie à l'aide d'un tampon. En comparant la sortie attendue ("abcn") avec la sortie réelle obtenue du tampon, le test vérifie le comportement correct de la fonction echo.
Cette approche sépare le test de la logique du programme des spécificités de gestion stdin et stdout, fournissant une stratégie de test plus fiable et plus maintenable.
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!