web-dev-qa-db-fra.com

Comment exécuter des cas de test dans un fichier spécifié?

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?

157
user972946

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.

257
zzzz

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.
108
TomDotTom

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.

9
Francesco Casula

dans intelliJ IDEA plug-in go-lang (et je suppose dans jetgrains Gogland), vous pouvez simplement définir le type de test pour le fichier sous exécuter> modifier les configurations

screenshot create go test on go file

5
robert king
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"

go test -v -run $(cat coordinator_test.go | testcases)
3
user2865442
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
  • Le TestFunc doit être dans un fichier de test go dans ce paquet
  • Nous pouvons fournir une expression régulière pour faire correspondre un ensemble de cas de test ou simplement la fonction de cas de test exacte pour exécuter un seul cas de test. Par exemple -run TestCaseFunc
0
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
0
Dele