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

205

Mes cas de test de package sont dispersés sur plusieurs fichiers, si je l'exécute, go test <package_name>il exécute tous les cas de test du package.

Il n'est cependant pas nécessaire de les exécuter tous. Existe-t-il un moyen de spécifier un fichier go testà exécuter, afin qu'il n'exécute que les cas de test définis dans le fichier?


la source

Réponses:

326

Il y a deux façons. Le plus simple est d'utiliser l' -runindicateur et de fournir un modèle correspondant aux noms des tests que vous souhaitez exécuter.

Exemple:

$ go test -run NameOfTest

Voir la documentation pour plus d'informations.

L'autre façon consiste à nommer le fichier spécifique, contenant les tests que vous souhaitez exécuter:

$ go test foo_test.go

Mais il y a un hic. Cela fonctionne bien si:

  • foo.goest dedans package foo.
  • foo_test.goest package foo_testdedans et importe "foo".

Si foo_test.goet foo.gosont le même package (un cas courant), vous devez nommer tous les autres fichiers nécessaires à la construction foo_test. Dans cet exemple, ce serait:

$ go test foo_test.go foo.go

Je recommanderais d'utiliser le -runmodèle. Ou, dans la mesure du possible, exécutez toujours tous les tests de package.

zzzz
la source
1
Pourriez-vous élaborer sur la première (facile) façon avec -runs'il vous plaît? Je ne trouve aucune référence manuelle sur celui-ci.
1
Vous pouvez également trouver des informations à ce sujet avecgo help testflag
Jeffrey Martinez
Lorsque j'utilise la commande, go test utils.go utils_test.gola sortie est ok command-line-arguments 0.002s. Il ne lance pas le test. La raison pour laquelle je souhaite utiliser ce mode de test est que le package contient de nombreux fichiers et qu'ils ne compilent pas encore, sauf les utilitaires. Je voudrais donc finaliser les utilitaires avant de travailler sur d'autres fichiers. Comment puis je faire ça ?
chmike
Si vous voulez voir ce qui est enregistré lors des tests, il convient de mentionner le -vdrapeau (verbeux). De la documentation-v Verbose output: log all tests as they are run. Also print all text from Log and Logf calls even if the test succeeds.
robstarbuck
121

La réponse de @ zzzz est presque complète, mais pour éviter aux autres d'avoir à fouiller dans la documentation référencée , 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, pas le nom de fichier où le test existe.

L' -runindicateur accepte en fait une expression régulière afin que vous puissiez limiter l'exécution du test à une classe de tests. De la documentation:

-run regexp
    Run only those tests and examples matching the regular
    expression.
TomDotTom
la source
28
Il convient de noter que le nom du package est le nom complet du package, par exemple "github.com/you/stuff/a/b/c"
garbagecollector
1.9.3 accepte également le chemin relatif du package.
2
Je ne sais pas pourquoi, mais pour une raison quelconque, je devrais spécifier "./" avant le nom du paquet
Roozbeh Zabihollahi
12

Lors de l'exécution d'un seul test, je fais généralement:

go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1

-count 1garantit é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 de modules, la même chose pourrait être obtenue en définissant GOCACHE=offmais cela interagit mal avec les modules Go.

Francesco Casula
la source
6

dans le plugin intelliJ IDEA go-lang (et je suppose que dans jetbrains Gogland), vous pouvez simplement définir le type de test à déposer sous exécuter> modifier les configurations

capture d'écran créer un test go sur un fichier go

Robert King
la source
2
Dans Gogland, vous pouvez simplement cliquer avec le bouton droit sur le fichier de test et choisir «exécuter foo_test.go», il construira le package avec les tests, puis transmettra une expression régulière contenant les noms de tous les tests de ce fichier de test à l'indicateur -run. Une fonctionnalité vraiment utile.
Eloff
4
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"

go test -v -run $(cat coordinator_test.go | testcases)
user2865442
la source
2
go test -v ./<package_name> -run Test

Empêche la mise en cache des résultats des tests.

go test -count=1 ./<package_name> -run Test
Dele
la source
0
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
  • Le TestFunc doit être à l'intérieur d'un gofichier de test dans ce package
  • Nous pouvons fournir une expression régulière pour 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
Abhishek Srivastava
la source