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>
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>
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!