Les cas de test de mon paquet sont dispersés dans plusieurs fichiers. Si j'exécute go test <package_name>
, tous les cas de test du paquet sont exécutés.
Il est cependant inutile de les exécuter tous. Existe-t-il un moyen de spécifier un fichier à exécuter par go test
, afin qu'il n'exécute que les scénarios de test définis dans le fichier?
Il y a deux façons. La plus simple consiste à utiliser le drapeau -run
et à fournir un modèle correspondant aux noms des tests que vous souhaitez exécuter.
Exemple:
$ go test -run NameOfTest
Voir le docs pour plus d'informations.
L'autre façon est de nommer le fichier spécifique, contenant les tests que vous voulez exécuter:
$ go test foo_test.go
Mais il y a un problème. Cela fonctionne bien si:
foo.go
est dans package foo
.foo_test.go
est dans package foo_test
et importe 'foo'.Si foo_test.go
et foo.go
constituent le même package (cas courant), vous devez nommer tous les autres fichiers nécessaires à la construction de foo_test
. Dans cet exemple, ce serait:
$ go test foo_test.go foo.go
Je recommanderais d'utiliser le modèle -run
. Ou, si possible, toujours exécuter tous les tests de packages.
La réponse de @ zzzz est en grande partie complète, mais pour éviter aux autres utilisateurs de ne pas avoir à creuser avec la référence documentation , vous pouvez exécuter un seul test dans un package, comme suit:
go test packageName -run TestName
Notez que vous souhaitez transmettre le nom du test, et non le nom du fichier où le test existe.
L’indicateur -run
accepte en fait une expression rationnelle, ce qui vous permet de limiter l’exécution du test à une classe de tests. De la docs:
-run regexp
Run only those tests and examples matching the regular
expression.
Lorsque je lance un seul test, je fais habituellement:
go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1
-count 1
garantit également que le test est exécuté à chaque fois au lieu d'être mis en cache. Utile lorsque vous testez des conditions de course et que vous avez un test qui échoue parfois. Dans les versions Go n'utilisant pas modules , la même chose pourrait être obtenue en définissant GOCACHE=off
, mais cela interagit mal avec les modules Go.
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"
go test -v -run $(cat coordinator_test.go | testcases)
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
go
dans ce paquet-run TestCaseFunc
go test -v ./<package_name> -run Test
Empêche la mise en cache des résultats de test.
go test -count=1 ./<package_name> -run Test