Maison > développement back-end > Golang > Comment exécuter plusieurs tests de packages dans Go de manière séquentielle ?

Comment exécuter plusieurs tests de packages dans Go de manière séquentielle ?

Patricia Arquette
Libérer: 2024-11-04 01:16:03
original
1058 Les gens l'ont consulté

How to Run Multiple Package Tests in Go Sequentially?

Exécution de plusieurs tests de packages dans Go

Lors de l'exécution de tests dans plusieurs packages sous un sous-répertoire à l'aide de go test ./..., les utilisateurs peuvent rencontrer des problèmes si les tests reposent sur des variables globales et des interactions avec des bases de données. En effet, les tests sont exécutés simultanément, ce qui peut provoquer des conflits et des échecs.

Causes du problème

La principale cause du problème est que les tests de différents packages sont s'exécute en parallèle, même lorsque -parallel 1 est spécifié. Cela conduit à des conflits potentiels pour les ressources partagées, telles que les variables globales et les connexions à la base de données.

Solution

Utilisation de go test -p 1 (indicateur non documenté)

Comme suggéré par @Gal Ben-Haim, le drapeau non documenté go test -p 1 peut être utilisé pour forcer la construction et le test de tous les packages en série. Cela garantit que les tests sont exécutés séquentiellement, évitant ainsi tout conflit.

Script shell personnalisé ou alias

Si l'utilisation d'un indicateur non documenté n'est pas préférable, un script shell personnalisé ou un alias peut être créé pour émuler le comportement de go test ./... tout en forçant une exécution séquentielle. Par exemple :

<code class="bash">find . -name '*.go' -printf '%h\n' | sort -u | xargs -n1 -P1 go test</code>
Copier après la connexion

Exemples de fonctions de configuration et de démontage

Voici un exemple de la façon dont les fonctions de configuration et de démontage peuvent être utilisées pour gérer la configuration et le nettoyage de la base de données :

<code class="go">var session *mgo.Session
var db *mgo.Database

func setUp() {
  s, err := cfg.GetDBSession()
  if err != nil {
    panic(err)
  }

  session = s
  db = cfg.GetDB(session)
  db.DropDatabase()
}

func tearDown() {
  db.DropDatabase()
  session.Close()
}</code>
Copier après la connexion

Conclusion

Pour garantir l'exécution séquentielle des tests pour plusieurs packages, les utilisateurs peuvent soit utiliser l'indicateur non documenté go test -p 1, soit créer un script shell personnalisé ou un alias qui exécute les tests dans l'ordre. En mettant en œuvre cette approche, les conflits et les échecs causés par l'exécution parallèle peuvent être évités.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal