Lancement des tests en Go : comment exécuter uniquement le fichier souhaité ? Guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

« Peut-on exécuter un seul fichier de tests ? » — oui, et voici comment faire en Go

\n\n

Avez-vous déjà été devant votre terminal, tapant go test ./... et observant avec horreur toute la base de code de votre projet Go lancer des centaines de tests ? Alors que vous aviez seulement besoin de vérifier un petit fichier de cas de test que vous veniez de terminer. Ça vous parle ? Si oui, vous êtes au bon endroit.

\n\n

Dans cet article, nous allons décortiquer une question populaire sur Stack Overflow (qui compte d'ailleurs des milliers de vues) : « How to run test cases in a specified file? ». Nous adapterons les réponses à la réalité du développeur Go et montrerons non seulement les commandes de base, mais aussi des astuces qui vous feront gagner des heures de travail. C'est parti !

\n\n

Pourquoi un simple go test n'est pas toujours adapté ?

\n\n

Dans les grands projets, les tests sont divisés en tests unitaires, d'intégration et de bout en bout. Si vous lancez go test ./..., Go parcourt récursivement tous les sous-packages et exécute tous les tests trouvés. Cela peut prendre des minutes. Et si vous avez des tests qui accèdent à une base de données ou à des API externes, ils peuvent échouer pour des raisons indépendantes de votre volonté. C'est pourquoi savoir exécuter des cas de test dans un fichier spécifique n'est pas seulement une commodité, mais une compétence de développeur professionnel.

\n\n

Commande de base : go test avec le nom du fichier

\n\n

La méthode la plus directe est de spécifier le fichier de test concret. Mais il y a une subtilité : Go exige que vous indiquiez à la fois le fichier testé et le fichier de test ensemble. Pourquoi ? Parce que le compilateur doit compiler tout le code du package.

\n\n

Supposons que vous ayez la structure de projet suivante :

\n\n
myproject/\n├── main.go\n└── math_utils.go\n└── math_utils_test.go\n
\n\n

Pour exécuter les tests uniquement à partir de math_utils_test.go, exécutez :

\n\n
go test -v math_utils.go math_utils_test.go\n
\n\n

Le flag -v (verbose) affiche des informations détaillées sur chaque cas de test. Sans lui, vous ne verrez que le résultat : PASS ou FAIL.

\n\n

Exemple de code réel

\n\n

Créons un fichier simple math_utils.go :

\n\n
package main\n\nfunc Sum(a, b int) int {\n    return a + b\n}\n\nfunc Multiply(a, b int) int {\n    return a * b\n}\n
\n\n

Et le fichier de test math_utils_test.go :

\n\n
package main\n\nimport "testing"\n\nfunc TestSum(t *testing.T) {\n    result := Sum(2, 3)\n    if result != 5 {\n        t.Errorf("Sum(2, 3) = %d; want 5", result)\n    }\n}\n\nfunc TestMultiply(t *testing.T) {\n    result := Multiply(3, 4)\n    if result != 12 {\n        t.Errorf("Multiply(3, 4) = %d; want 12", result)\n    }\n}\n
\n\n

Lançons maintenant :

\n\n
$ go test -v math_utils.go math_utils_test.go\n=== RUN   TestSum\n--- PASS: TestSum (0.00s)\n=== RUN   TestMultiply\n--- PASS: TestMultiply (0.00s)\nPASS\nok      command-line-arguments  0.002s\n
\n\n

Notez la sortie : ok command-line-arguments. Cela signifie que Go a compilé un package temporaire à partir des fichiers spécifiés. Cette approche fonctionne, mais a des limitations.

\n\n

Problème avec plusieurs fichiers dans un même package

\n\n

Si votre package se compose de plusieurs fichiers (par exemple, math_utils.go et strings_utils.go), et que le test dans math_utils_test.go appelle une fonction de strings_utils.go, la commande ci-dessus échouera avec une erreur de compilation. Go signalera que la fonction n'est pas définie.

\n\n

La solution est de lister tous les fichiers dépendants. Mais ce n'est pas pratique. Il est préférable d'utiliser une autre approche.

\n\n

Méthode avancée : filtrage des tests par nom (-run)

\n\n

Le flag -run permet d'exécuter uniquement les cas de test dont les noms correspondent à une expression régulière. Ce n'est pas lié à un fichier, mais si vous avez nommé vos tests de manière explicite, vous pouvez facilement filtrer ceux dont vous avez besoin.

\n\n

Exemple : exécuter tous les tests commençant par TestSum :

\n\n
go test -v -run T                

Blogs

Book Recommendations